SQL SELECT使用CASE语句,但有多个条件

时间:2011-03-31 06:55:13

标签: sql select count sum case

我正在尝试使用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强制窗口。

请帮助; - )

1 个答案:

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

或者,您可以查找不完整的数字。但是同样的基本技巧 - 一个案例总和的案例 - 将起作用。