2011-11-08 3 views
1
USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY,[ORDERS_ID] = 
CASE ORDERID 
WHEN ORDERID = 10300 
THEN 'I AM FROM 10300' 
WHEN ORDERID = 10400 
THEN 'I AM FROM 10400' 
WHEN ORDERID = 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END 
FROM ORDERS; 
GO 

오류 - 메시지 102, 수준 15, 상태 1, 3 호선 근처의 구문이 잘못되었습니다 '='.T-SQL - 오류 사례 문에

SQL Server에 northwind Database가있는 경우이 쿼리를 실행할 수 있습니다.

어디에 문제가 있는지 이해할 수 없습니다. 누구든지이 문제를 해결할 수 있습니까?

답변

5

이 시도 :

당신은 당신의 초기 CASE xxxx 문에 명시되어
USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY, 
CASE ORDERID 
WHEN 10300 
THEN 'I AM FROM 10300' 
WHEN 10400 
THEN 'I AM FROM 10400' 
WHEN 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END as OrdersId 
FROM ORDERS; 
GO 

, 당신은 당신의 WHEN 절에서 변수를 반복 할 수 없습니다. 이것도 똑같이 작동합니다.

USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY, 
CASE 
WHEN ORDERID = 10300 
THEN 'I AM FROM 10300' 
WHEN ORDERID = 10400 
THEN 'I AM FROM 10400' 
WHEN ORDERID = 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END as OrdersId 
FROM ORDERS; 
GO 

이와 같은 별칭을 지정할 수도 없습니다. CASE 블록 다음에 AS 키워드를 사용하십시오.

편집 : Adam Wenger의 의견에 따르면 [alias] = fieldname과 같은 별칭을 쿼리에 쓸 수 있습니다. 수정 주셔서 감사! 간단하고 검색 :

+0

상어, 당신이 가지고있는 것처럼 별명을 선호하지만'[Alias] = CASE statement'로 별명을 지정할 수 있습니다. –

+0

@AdamWenger 나는 그것을 몰랐다. 나는 그것을 시험해야 할 것이다! 수정 해 주셔서 감사합니다. 잘 알려지지 않은이 정보는 우리를 더욱 좋게 만듭니다. 다시 한번 감사드립니다. –

+0

@AdamWenger 물론, 당신 말이 맞습니다. 나는 정정으로 내 대답을 수정했다. 감사! –

3
USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY, 
CASE ORDERID 
WHEN 10300 
THEN 'I AM FROM 10300' 
WHEN 10400 
THEN 'I AM FROM 10400' 
WHEN 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END as [ORDERS_ID] 
FROM ORDERS; 
GO 
+0

정말 고마워요.이 코드는 잘 작동합니다 .. – mark

1
USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY, 
CASE ORDERID 
    WHEN 10300 
    THEN 'I AM FROM 10300' 
    WHEN 10400 
    THEN 'I AM FROM 10400' 
    WHEN 10500 
    THEN 'I AM FROM 10500' 
    ELSE 'I AM OUT OF RANGE' 
END ORDERS_ID 
FROM ORDERS; 
GO 
3

case 구조는 두 개의 서로 다른 형태를 가질 수있다. 사용법 :

SELECT SHIPCOUNTRY,[ORDERS_ID] = 
    CASE ORDERID 
    WHEN 10300 THEN 'I AM FROM 10300' 
    WHEN 10400 THEN 'I AM FROM 10400' 
    WHEN 10500 THEN 'I AM FROM 10500' 
    ELSE 'I AM OUT OF RANGE' 
    END 
FROM ORDERS