2014-04-09 77 views
0

我正在嘗試執行case語句,如果某個特定項目的所有記錄都包含所有團隊的特定值,那麼該項目將按照我的看法進行分類。沿具有集合函數的SQL Case語句

case when (COUNT(team_Name) = (SUM(status = 'Completed')) then 'Complete' 
case when (COUNT(team_Name) = (SUM(status = 'On Hold')) then 'On hold' 
case when (COUNT(team_Name) = (SUM(status = 'Pending')) then 'Pending' 
else 'In Progress' end 

線的東西,所以我想獲得的(狀態=「已完成」)的總和,我相信這是一個布爾語句匹配team_names的計數。我的思考過程是,如果團隊名稱數和「完成」狀態數相同,則該項目將被視爲「完成」。

因此,選擇分組將進入項目 - >團隊 - >狀態 - > case語句的結果。我想在連接中使用上面的case語句,這樣case語句的結果集合在Project級別上或者沿着這些行級別。

但是,我的語法似乎有點關閉上面的語句,我不能讓查詢運行與此。 '='附近出現錯誤的語法錯誤。爲(狀態='完成')方面。

這甚至可能在SQL中,或者是否有我需要改變的東西。

+0

所以有很多狀態,只有它們全部相等,那麼這被認爲是項目狀態?否則,例如,如果一個狀態是「完成」並且一個狀態是「暫停」,那麼該項目應該是「廢棄」的?你將計數與所有非空隊名的數量進行比較?不知何故,這似乎沒有多大意義。 –

+0

事實上,如果這種情況稱爲「正在進行」,那麼這將是有意義的......我只是爲這個問題制定了隨機狀態,但在這種情況下你沒有任何意義。所有團隊將在一個項目中進行操作,因此對於項目1(如果有3個團隊),他們全部都處於「待定」狀態,則項目狀態處於「待定」狀態。如果是混合狀態,那麼我可以將其命名爲「進行中」或其他。 – user3348557

+0

因此,每個具有狀態和團隊名稱的子項目或任務都有一條記錄,對嗎?所以在team_Name中沒有NULL,COUNT(team_Name)實際上是COUNT(*),對嗎? –

回答

2

試試這個:

case COUNT(team_Name) 
    when SUM(CASE WHEN status = 'Completed' THEN 1 END) then 'Complete' 
    when SUM(CASE WHEN status = 'On Hold' THEN 1 END) then 'On Hold' 
    when SUM(CASE WHEN status = 'Pending' THEN 1 END) then 'Pending' 
     else 'Abandoned' end 
+0

與我正在尋找的東西非常接近,但是因爲這些團隊與項目相關聯,所以新列僅僅引入「狀態」引入的任何值。讓我知道如果我不清楚或模糊...嘗試在SQL上更好。 – user3348557

+0

@ user3348557:Hamlet的答案解決了你的語法問題。所以如果你的陳述還有其他問題,那麼你應該向我們展示這個陳述以及哈姆雷特解決方案的結果和期望的結果。 –

+0

這很公平。猜猜我會問另一個問題。謝謝! – user3348557

0

您可以實現這一點使用解碼功能。它的工作原理類似於IF-THEN-ELSE條件。

隨着一個例子:

Select YourFieldAliasName = 
CASE TEAM_ID 
    WHEN 'Completed' THEN 'Complete' 
WHEN 'On Hold' THEN 'Complete' 
WHEN 'Pending' THEN 'Pending' 
    ELSE 'Abandoned' 
END 

這裏被遺棄的是別的情況下,如果條件其餘全部失敗。

+0

它不是Oracle。無論如何,解決方案不正確。 –