我列出了每个人在一张桌子中有多少案例。我想包括所有有案例的人(没有单独的用户表),即使他们本周没有案例。
我目前的成绩:
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删除了本周没有案例的所有人,因此我不确定如何仍然包含它们。
提前致谢。
答案 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