2017-09-04 1 views
1

하나의 SQL 쿼리에 두 조건을 적용하려고합니다. SQL 쿼리에서 CASE 절을 두 번 사용하는 방법

(select DISTINCT (
     CASE WHEN (
     ABC.GemUserID = '99') 
     OR ABC.GemUserID != '99' 
      THEN 'Yes' 
    ELSE 'No' 
     END)) AS AllWell 

"예"로 나에게 출력을 제공 곳 CASE는 같은 아래 한 파일에 대해 사실과 같이

현재 결과 :

99 , Yes 
99 , Yes 
99 , Yes 

예상 결과 :

99 , No 
99 , No 
99 , Yes 

아래의 쿼리를 사용하고 있지만 SQL Query Intellisence가이 쿼리를 잘못 식별하고 있습니다.

잘못된 쿼리 :

(select DISTINCT (
    CASE WHEN (ABC.GEMUserID = '99' THEN 'Yes' else 'No' 
    CASE WHEN (ABC.GEMUserID != '99' THEN 'No' else 'Yes' 

    END)) AS AllWell 

위의 잘못된 쿼리를 수정 후 :

(select DISTINCT 
     (CASE WHEN ABC.GemUserID = '99' THEN 'Yes' else 'No' END), 
     (CASE WHEN ABC.GemUserID != '99' THEN 'No' else 'Yes' END)) 
     AS AllWell 

하지만 오류가 점점 오전 :

Msg 116, Level 16, State 1, Line 17 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

어떻게이 문제를 해결하려면?

+0

'내부적으로'사용 '사례 1 = 1 그렇다면 2는 2를, 2는 2를, 0을 0으로 끝내십시오' – Fabio

+5

왜 똑같은 것처럼 보이는 두 가지 사례 문이 맞습니까? – spyr0

+1

샘플 데이터와 원하는 결과를 제공해주십시오. –

답변

5

select distinct은 - 자체 - SQL 구문의 일부입니다. distinct은 기능이 아닙니다. 그 뒤에는 괄호를 써서는 안됩니다. 따라서 귀하의 질문을 이해하는 경우 :

select DISTINCT 
     (CASE WHEN ABC.GEMUserID = '99' THEN 'Yes' else 'No' END), 
     (CASE WHEN ABC.GEMUserID <> '99' THEN 'No' else 'Yes' END) as AllWell 

첫 번째 열에 이름을 부여 할 계획입니까?

+0

답장을 보내 주셔서 감사합니다. 나는 나의 질문을 편집하고 명확하게하려고 노력했다. 내가 지적한대로 쿼리를 구성했습니다. 하지만 그 실수는 내 실수 일 수 있습니다. 친절하게 내가 무엇을 잘못하고 있는지 나에게 암시한다. 감사. – DBOn

2
select DISTINCT 
CASE WHEN ABC.GEMUserID = '99' THEN 'Yes' 
    ELSE 'No' -- This is automatically When ABC.GEMUserID <> '99' 
END AS AllWell 
+0

고맙습니다. @Arix. 내 질문과 명확한 요청을 수정했는지 확인하십시오. – DBOn

+0

이것을 사용하는 방법에 대한 컨텍스트를 부여 할 수 있습니까? 두 개의 열이 반환되고 그 중 하나는 숫자 ... 99이고 다른 하나는 '예'또는 '아니요'입니다. 예와 아니요를 무작위로 추출하려고합니까? – Arix

0

오류에 따르면 쿼리는 큰 SQL 명령의 하위 쿼리 (IN? 뒤에있을 수 있음)입니다. 따라서 이러한 하위 쿼리 to return more than one column에는 사용할 수 없습니다.

0

그래서 첫 번째 질문은, 당신이 말한 : 즉

CASE WHEN userID = 99 OR userID != 99 

:

CASE WHEN 1=1 

이 모든 것을 (확실하지에 대한 yes를 반환하는 이유가 무엇인지 현재와의 차이 예상 결과는 userID가 모든 행에 대해 99임을 고려해야합니다).

잘못된 검색어의 경우 다른 선택의 중간에 선택 항목을 반환하는 것으로 보입니다 (끝에 별칭을 지정하기 때문에). 이 때문에 중첩 된 선택 항목에 둘 이상의 열을 반환 할 수 없습니다. 이 같은 FROM로 쿼리에 누락 된 조각을 유지한다고 가정

(select DISTINCT 
    CASE WHEN ABC.GemUserID = '99' THEN 'Yes' Else 'No' End) AS AllWell 

: 당신은 단순히 당신의 쿼리를 변경, 두 번째 CASE 문을 필요하지 않습니다.

관련 문제