即使count为零,也包括行

时间:2016-01-18 09:43:28

标签: sql sql-server sql-server-2008

我列出了每个人在一张桌子中有多少案例。我想包括所有有案例的人(没有单独的用户表),即使他们本周没有案例。

我目前的成绩:

PERSON  CASES
Jerry   1
Tom     1

我正在寻求:

PERSON  CASES
Jerry   1
Tom     1
Spike   0

我现在正在运行的查询:

DECLARE @now DATETIME = GETDATE()

SELECT PERSON, COUNT(CASES)
FROM TASKS
WHERE CASEDATE > CONVERT(DATE, DATEADD(dd, -(DATEPART(dw, @now)-1), @now))
GROUP BY PERSON
ORDER BY PERSON

如你所见,我的where-clause删除了本周没有案例的所有人,因此我不确定如何仍然包含它们。

提前致谢。

2 个答案:

答案 0 :(得分:7)

执行此操作的一种方法是将条件逻辑放在聚合内的CASE内:

DECLARE @now DATETIME = GETDATE()

SELECT PERSON, SUM(CASE
            WHEN CASEDATE > CONVERT(DATE, DATEADD(dd, -(DATEPART(dw, @now)-1), @now))
                 THEN 1 ELSE 0 END)
FROM TASKS
GROUP BY PERSON
ORDER BY PERSON

答案 1 :(得分:3)

我会将TASK表加入PERSON表并使用不同的语法来查找星期日:

SELECT 
  p.PERSON, 
  COUNT(t.CASES) cnt
FROM PERSON p
LEFT JOIN TASK t
ON p.id = t.PERSON_FK
WHERE t.CASEDATE > DATEADD(d, -1, DATEDIFF(d, -1, @now) / 7 * 7)
GROUP BY p.PERSON
ORDER BY p.PERSON