如何根据类型显示正确的sum()值

时间:2015-06-04 05:09:56

标签: sql-server

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

1 个答案:

答案 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