2012-10-18 4 views
2

CASE 문을 사용하려고하는데 나는 얻고 싶은 대답을 얻지 못했습니다.CASE 문이나 유사한 기술

Docid  DocNumber LatestDate 
30   14-1   NULL 
30   14-1   2004-03-01 
31   14-3   2012-10-17 
36   1-2   NULL 
36   1-2   1996-12-01 

하지만 좀하고 싶습니다 :

DECLARE @Table TABLE (DocID INT, DocNumber VARCHAR(10),DocDevStat INT, MilestoneDate DATETIME, 
         MilestoneID INT) 
INSERT INTO @Table VALUES (30, '14-1', 6, '10-01-2001', 10) 
INSERT INTO @Table VALUES (30, '14-1', 6, '10-15-2001', 11) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-06-2002', 13) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-01-2003', 27) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-01-2003', 30) 
INSERT INTO @Table VALUES (30, '14-1', 6, '03-01-2004', 28) 
INSERT INTO @Table VALUES (30, '14-1', 6, '03-01-2004', 35) 
INSERT INTO @Table VALUES (31, '14-3', 2, '06-27-2003', 10) 
INSERT INTO @Table VALUES (31, '14-3', 2, '05-05-2004', 27) 
INSERT INTO @Table VALUES (31, '14-3', 2, '05-05-2004', 30) 
INSERT INTO @Table VALUES (31, '14-3', 2, '07-20-2005', 35) 
INSERT INTO @Table VALUES (31, '14-3', 2, '08-31-2005', 32) 
INSERT INTO @Table VALUES (36, '1-2', 7, '10-01-1996', 10) 
INSERT INTO @Table VALUES (36, '1-2', 7, '10-01-1996', 11) 
INSERT INTO @Table VALUES (36, '1-2', 7, '12-01-1996', 28) 
INSERT INTO @Table VALUES (36, '1-2', 7, '12-01-1996', 35) 

Select distinct t.Docid, t.DocNumber, 

case when t.DocDevStat IN (6,7,8) and t.MilestoneID = 35 then Max(t.Milestonedate) 
    when t.DocDevStat IN (2,3,4) then Convert(date,GETDATE()) end AS LatestDate 

FROM @Table t 
Group By t.DocID, t.DocNumber, t.DocDevStat, t.MilestoneID 

내가 얻는 결과는 다음과 같습니다

Docid  DocNumber LatestDate 
30   14-1   2004-03-01 
31   14-3   2012-10-17 
36   1-2   1996-12-01 

가에 CASE 문 바로 기술입니다 여기에

코드입니다 이 경우에 사용 되나요?

+1

출력에't.DocDevStat'과't.MilestoneID' 컬럼을 추가하십시오. 그러면 어떤 일이 잘못되었는지 알 수 있습니다. – RBarryYoung

+0

예'CASE'는'IF EXISTS'로 확인할 수 있습니다. –

답변

3
Select DISTINCT t.Docid, t.DocNumber, 
case when t.DocDevStat IN (6,7,8) then Max(t.Milestonedate) 
when t.DocDevStat IN (2,3,4) then Convert(date,GETDATE()) end AS LatestDate 
FROM @Table t 
where t.DocDevStat IN (2,3,4) OR (t.DocDevStat IN (6,7,8) and t.MilestoneID = 35) 
Group By t.DocID, t.DocNumber, t.DocDevStat, t.MilestoneID 

이 쿼리는 찾고있는 데이터를 반환합니다. 내가 찾던 조건을 where 절에 추가했습니다.

+0

완벽하게 작동합니다! 고맙습니다 – Ddragov