2011-09-14 6 views
1

테이블이 3 개 있습니다. 그들은 1 대 다 관계가 있습니다SQL 조건부 계산

table1 - mainID, Select00(bit), Select01(bit) 
table2 - secID, mainID 
table3 - secID, Num00, Num01 



SELECT table1.mainID , SUM(table3.Num00) as S00, SUM(table3.Num01) as S01 
FROM table1 INNER JOIN 
     table2 ON table1.mainID = table2.mainID INNER JOIN 
     table3 ON table2.secID = table3.secID 
GROUP BY table1.mainID HAVING table1.mainID =11 

다음 쿼리는 작동하지만 모든 합계를 제공합니다.

조건에 따라 SUM을 얻으려면 어떻게해야합니까?

S00 = SUM(table3.Num00) if table1.Select00 = 1 (true) 
S01 = SUM(table3.Num01) if table1.Select01 = 1 (true) 

답변

5
SELECT 
    t1.mainID, 
    S00 = SUM(CASE WHEN t1.Select00 = 1 THEN t3.Num00 ELSE 0 END), 
    S01 = SUM(CASE WHEN t1.Select01 = 1 THEN t3.Num01 ELSE 0 END) 
FROM 
    dbo.table1 AS t1 
    INNER JOIN dbo.table2 AS t2 
    ON t1.mainID = t2.mainID 
    INNER JOIN dbo.table3 AS t3 
    ON t2.secID = t3.secID 
WHERE t1.MainID = 11 
GROUP BY table1.mainID; 
+0

큰 즉! 어떤 이점을 가지고 있든 어디에서 사용하고 있습니까? – user450143

+0

그냥 습관. HAVING은 일반적으로 집계를 필터링하는 데 사용됩니다 (논리적으로 GROUP BY 다음에 오는 이유입니다). 예를 들어, HAVING SUM (...)> 10. 그룹화 전에 필터를 제거합니다. HAVING을 사용하는 것만 큼 효율적입니다 (오랫동안 지속되어 온 가정이 틀렸다는 것이 증명 되더라도 기쁠 것입니다). –