2014-01-06 3 views
1

안녕하세요 위와 아래의 case 문 줄을 교환 할 때 다른 값을 얻고 있습니다. 어느 쪽이 좋지 않은가. 일부 기관은 위의 쿼리의tsql의 Case 문 결과에 대한 계산

SELECT 
    CASE 
    WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1 
    WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2 
    WHEN dDate > '20130709' ANd dDate < '20131009' THEN 3 as DateVal, 
CASE 
    WHEN dDate > '20130509' ANd dDate < '20130909' THEN COUNT(Encounter) 
    WHEN dDate > '20130609' ANd dDate < '20131109' THEN COUNT(Encounter) 
    WHEN dDate > '20130709' ANd dDate < '20131009' THEN COUNT(Encounter)) as Value 
FROM Table 1 

결과에 나를 도울 수있는 것은 변화가 위의 쿼리는 약간

SELECT 
     CASE 
     WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2 
     **WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1** 
     WHEN dDate > '20130709' ANd dDate < '20131009' THEN 3 as DateVal, 
    CASE 
     WHEN dDate > '20130609' ANd dDate < '20131109' THEN COUNT(Encounter) 
     **WHEN dDate > '20130509' ANd dDate < '20130909' THEN COUNT(Encounter)** 
     WHEN dDate > '20130709' ANd dDate < '20131009' THEN COUNT(Encounter)) as Value 
    FROM Table 1 

결과는 같다

EncounterCount  Date 
230     1 
45     2 
20     3 

입니다 :의 결과 위 쿼리는

EncounterCount  Date 
45     1 
150    2 
20     3 

이것은 나에게 매우 이상합니다. 아무도 도와 줄 수 있어요.

+0

이것은 날짜 범위가 겹치고 있기 때문에 발생하며, '사례'는 일반적으로 조건을 충족하는 첫 번째 올바른 표현식을 선택합니다. – Lamak

+0

날짜 형식이 yyyymmdd 또는 yyyyddmm입니까? –

답변

4

WHEN 절에 지정한 날짜 간격이 겹치기 때문입니다. CASE 문에서 일치하는 WHEN 절을 찾으면 해당 절의 결과 양식을 가져오고 다른 절은 건너 뜁니다.

일부 레코드는 WHEN 절과 일치 할 수 있습니다. 절을 재정렬하면 행이 다른 WHEN 절과 일치 할 확률이 변경됩니다.