2015-06-04 26 views
3
TABLE 1   
STAFF_NO TYPE  AMOUNT 
A1   O   300 
B3   A   10 
A1   A   45 
C3   O   70 
C4   A   300 
D4   O   100 

TABLE2 
STAFF_NO CODE 
A1   SS1 
B3   SS1 
C3   SS2 
C4   SS2 
D4   SS2 

正确的总和()值I内加入2个表和选择代码,员工和总和在高达两个类型A'based上代码“O”和”。 这里是我的SQL语句:如何显示基于该类型

SELECT DISTINCT B.CODE, 
COUNT(DISTINCT B.CODE) AS HEADCOUNT, 
O=(SELECT SUM(AMOUNT) FROM TABLE1 WHERE TYPE ='O'), 
A=(SELECT SUM(AMOUNT) FROM TABLE1 WHERE TYPE ='A') 
FROM TABLE1 A INNER JOIN TABLE2 B ON A.STAFF_NO=B.STAFF_NO group by B.code 

我的错误:SS1和SS2的 'O' 和 'A' 具有相同的值。

CODE HEADCOUNT O A 
SS1   2  300 55 
SS2   3  300 55 

结果我应该得到:

CODE HEADCOUNT O A 
SS1  2  300 55 
SS2  3  170 300 

回答

5

GROUP BY是你的朋友。

SELECT 
    B.CODE, 
    COUNT(A.STAFF_NO) HEADCOUNT, 
    SUM(CASE A.TYPE WHEN 'O' THEN A.AMOUNT ELSE 0 END) O, 
    SUM(CASE A.TYPE WHEN 'A' THEN A.AMOUNT ELSE 0 END) A 
FROM 
    TABLE1 A 
    INNER JOIN TABLE2 B ON B.STAFF_NO = A.STAFF_NO 
GROUP BY 
    B.CODE 

如果A.AMOUNT可以包含NULL,使用ISNULL

SUM(CASE A.TYPE WHEN 'O' THEN ISNULL(A.AMOUNT, 0) ELSE 0 END) O