2013-05-22 29 views
3

我有一個表是這樣的:我的查詢應該如何?

 
    date,    flag 
    22/05/13    1 
    22/05/13    1 
    22/05/13    0 
    23/05/13    1 
    23/05/13    0

所以我需要一個查詢,我在不同的列標誌的2個可能值計算。

 
    date  flag1  flag0 
    22/05/13 2   1 
    23/05/13 1   1

我應該怎樣寫我的查詢,以獲得在我上面顯示數據的方式?

+1

你是什麼日期列的數據類型? –

回答

5

事情是這樣的:

SELECT 
    [date] 
    SUM(CASE WHEN tbl.flag=0 THEN 1 ELSE 0 END) AS flag0, 
    SUM(CASE WHEN tbl.flag=1 THEN 1 ELSE 0 END) AS flag1 
FROM 
    tbl 
GROUP BY 
    tbl.[date] 
+0

@TimSchmelter sql小提琴在求和標誌= 1上都是 - http://sqlfiddle.com/#!6/05d4e/3 – Taryn

+0

感謝您的更正@bluefeet – Arion

+0

@TimSchmelter這是來自舊版本的帖子。從那以後他就修好了。 –

5
SELECT [date], sum(flag) "flag1", sum(1-flag) "flag0" 
FROM [table] 
GROUP BY [date] 

通常我會使用一個case語句中的SUM()內的功能,但是在這種情況下,它的作品了,我們可以通過簡單的脫身(快)表達式。

+0

+1(除非標誌是有點數據類型,不能求和,那麼你確實需要一個CASE語句。) – criticalfix

+0

@criticalfix或強制轉換爲int –

+0

是的,當然你是對的。 – criticalfix

2

您可以使用旋轉功能得到結果:

select date, [1] as flag1, [0] as flag0 
from yt 
pivot 
(
    count(flag) 
    for flag in ([1], [0]) 
) piv; 

SQL Fiddle with Demo