2012-06-29 28 views
3

我試圖一次顯示多個項目的狀態。例如,「date1」有3個聲明。每個聲明都有不同的狀態。如何顯示「date1」內所有索賠的狀態計數。也就是說,我想從最早到最後的日期訂購我的結果,然後有三列,並計算當天有多少索賠具有該狀態。這三個狀態列應該加起來當天的索賠總數。這是我想它是什麼樣子:(ST1 - St3的代表獨特的狀態)一天內有多個項目的單獨計數MySQL

Date  St1 St2 St3 
12-02-12 | 1 | 2 | 3 
12-03-12 | 2 | 5 | 3 
12-04-12 | 7 | 3 | 8 

查詢我開始看起來像這樣的工作,但它是完全不正確。

SELECT dates, statuses, COUNT(*) AS St1 FROM table_dates GROUP BY dates; 

這是我試圖獲得只有一個狀態的計數。我想我必須從某個地方開始。謝謝。

回答

2

你可以做的是這樣的:

SELECT SUM(if(statuses = st1,1,0)) as st1, 
SUM(if(statuses = st2,1,0)) as st2, 
SUM(if(statuses = st3,1,0)) as st3 
    FROM table_dates 
    GROUP BY dates; 
+0

1,0代表的語法是什麼? –

+0

這些都是實際的數字 - 對於每個查詢 - 如果條件結果爲真 - 它將返回第一個值1,如果爲false,則返回後者的值0.在這種情況下,您將總結狀態爲例如st1 - 這是你想要的。 – krakover

3

你想要的狀態添加到您的GROUP BY:

SELECT dates, status, COUNT(*) AS cnt 
FROM table_dates 
GROUP BY dates, status 

這將給稍有不同格式的結果,從你問:

 
Date  | Status | cnt 
2012-12-02 | 1  | 1 
2012-12-02 | 2  | 2 
2012-12-02 | 3  | 3 
2012-12-03 | 1  | 2 
2012-12-03 | 2  | 5 
2012-12-03 | 3  | 3 
2012-12-04 | 1  | 7 
2012-12-04 | 2  | 3 
2012-12-04 | 3  | 8 

這可能是一個更好的格式,因爲如果以後添加新的狀態,則不需要更改數據庫模式,SQL查詢和客戶端代碼。

+0

好吧,我或許可以用這個工作。但有沒有辦法做到這一點使用單獨的列爲每個狀態計數呢? –

+0

@ user1251693:是的,但這不是一個好主意。演示應該在客戶端完成。 –

+0

那麼這回答了我正在寫作過程中的問題。 – usumoio

相關問題