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
我内部连接2个表并选择代码,headcount和sum为两个类型的'O'和'A'基于代码。 这是我的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
我的错误:“O”和“A”上的SS1和SS2具有相同的值。
CODE HEADCOUNT O A
SS1 2 300 55
SS2 3 300 55
我应该得到的结果:
CODE HEADCOUNT O A
SS1 2 300 55
SS2 3 170 300
答案 0 :(得分: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