2011-03-31 117 views
2

我想使用CASE语句执行SQL SELECT查询,该语句正在工作100%。我的代码看起来如下:SQL SELECT使用CASE语句,但多个条件

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的附加标准。其复杂性在于,需求可能具有每种类型的多个任务,但是例如,如果需求的所有开发任务都完成,则必须将开发任务完成,否则它不完整。

我确实希望能够完成所有开发任务并完成所有测试任务并完成其所有发布任务,以测量需求数量,但将它们全部对照最新开发任务强制的窗口进行分组。

请帮助;-)

回答

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 

或者你可以寻找未完成的数量。但相同的基本技巧 - 一个案例总和的案例 - 将起作用。

+0

谢谢,似乎不适合我,因为结果集只包含1或0每个任务窗口 – john 2011-03-31 08:38:23

+0

我不知道这是否会起作用,因为每个任务在表中有自己的行,因此将总开发任务与每个需求完成的开发任务数完成的行数进行比较。有任何想法吗??? – john 2011-03-31 09:17:10

+0

是的,只是按需求而不是任务分组。 – Ben 2011-03-31 15:08:56