我正在尝试使用CASE语句执行SQL SELECT查询,该语句100%正常工作。我的代码如下:
SELECT t.TASK_WINDOW,
SUM(CASE WHEN t.TASK_NAME = 'DEV' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS DevComplete,
SUM(CASE WHEN t.TASK_NAME = 'TEST' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS TestComplete,
SUM(CASE WHEN t.TASK_NAME = 'RELEASE' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS ReleaseComplete
FROM Requirements r
INNER JOIN Tasks t
ON r.TASK = t.REQ_ID
GROUP BY t.TASK_WINDOW
但是我的问题是我对所有三个SUMS都有一个额外的标准。复杂性是一个需求可能包含每种类型的多个任务,但是例如,如果所有Dev任务完成,则需求必须只有Dev Task完成,否则它是不完整的。
我真的希望能够在完成所有开发任务的情况下测量需求量,并完成所有测试任务并完成所有发布任务,但是将它们全部分组到最新的Dev Task强制窗口。
请帮助; - )
答案 0 :(得分:1)
您需要将总数与完成数字进行比较:
SELECT t.TASK_WINDOW,
CASE
WHEN SUM(CASE WHEN t.TASK_NAME = 'DEV' THEN 1 ELSE 0 END) =
SUM(CASE WHEN t.TASK_NAME = 'DEV' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END)
Then 1
ELSE 0
END as AllDevComplete
FROM Requirements r
INNER JOIN Tasks t
ON r.TASK = t.REQ_ID
GROUP BY t.TASK_WINDOW
或者,您可以查找不完整的数字。但是同样的基本技巧 - 一个案例总和的案例 - 将起作用。