2011-02-08 83 views
0

我想統計任務1至3的訂單總數。 然後,如果entry1已經計數,我需要檢查狀態是否正在進行(所有狀態都未完成) 。 我需要在這裏使用嵌套CASE,我不想將它包含在我的WHERE子句 中,因爲我稍後會加入更多表。MySQL查詢中的嵌套CASE

這是我的示例表:

ID + orderid + task + status 
1 | 1  | 1  | Completed 
2 | 2  | 1  | Saved 
3 | 3  | 1  | Saved 
4 | 1  | 2  | Completed 
5 | 1  | 3  | Completed 

正如你可以在已ENTRY1總的在建工程爲2,完成任務現場看到的是1 當我執行我的查詢我得到的結果2當我使用entry1和狀態不保存,但我也得到了刪除NOT時的結果2。但是當我使用('COMPLETED')時,我得到了正確的結果。那麼在我的代碼中('SAVED')有什麼問題。我希望我沒有在我的問題中輸入任何內容。

這是我的示例查詢:

SELECT 
    COUNT(
     CASE task 
      WHEN 1 THEN task ELSE NULL 
     END 
     AND 
     CASE `status` 
      WHEN NOT UPPER('SAVED') THEN `status` ELSE NULL 
     END 
     ) e1_inprogress 
    FROM tableName; 

現在我只用唯一的任務1,但在我真正的代碼,我也需要包括所有任務和COUNT所有狀態。 我認爲這很簡單,也許我錯過了什麼,然後請糾正我。 如果您有其他方式,請讓我們知道。

回答

1

使用此

SELECT 
    COUNT(
     CASE WHEN task = 1 AND Upper(`status`) = 'SAVED' THEN 1 END 
     ) e1_inprogress 
    FROM tableName; 


爲什麼它不工作?

WHEN NOT UPPER('SAVED') 

NOT UPPER('SAVED')成爲NOT (TRUE)變得FALSE,所以你對價值FALSE比較CASE Status

您的查詢可能已經

CASE Upper(`Status`) 
WHEN 'SAVED' THEN ... ELSE ... 

(注:交換的THEN和ELSE的代碼)

+0

現在我得到它..問題是我的關於不等於我應該用思維< >或!=而不是NOT或<=>。隨着你的解釋,我會認爲這是我接受的答案,而你是代碼我會用它代替我的,以縮短我的查詢。再次感謝(我應該先研究基本) – ace 2011-02-08 04:44:27