2011-03-31 79 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