2012-11-07 29 views
0

交換的行和列目前,我有以下幾點:「按組」查詢

SELECT status,count(status) AS count 
    FROM [DB].[dbo].[contact] 
    GROUP BY status 

這給了我如下:

Status 1 | 12 
Status 2 | 23 
Status 3 | 63 

我試圖讓表看像這樣:

Status 1 Status 2 Status 3 
    12  23   63 

最終表看起來就像這樣:

    Status 1 Status 2 Status 3 
Date Range 1  12  23   63 
Date Range 2  23  2   3  

我只是不知道該怎麼做。我應該學習什麼樣的SQL命令/語法來完成這個任務?這是我第一次看SQL,所以任何指針都會很棒。

回答

1

您可以使用這樣的查詢,這將讓你在正確的格式的數據:

SELECT 
    sum(case when status = 'Status 1' then 1 else 0 end) Status1, 
    sum(case when status = 'Status 2' then 1 else 0 end) Status2, 
    sum(case when status = 'Status 3' then 1 else 0 end) Status3 
FROM [DB].[dbo].[contact] 

在SQL Server中,你甚至可以使用PIVOT功能來轉換數據:

select [Status 1] as Status1, 
    [Status 2] as Status2, 
    [Status 3] as Status3 
from 
(
    SELECT status, status as statusToCount 
    FROM [DB].[dbo].[contact] 
) src 
pivot 
(
    count(statusToCount) 
    for status in ([Status 1], [Status 2], [Status 3]) 
) piv 
+0

哇,這非常有幫助。 – RobVious

+0

假設每行有一個固定的日期範圍,你會如何建議將日期過濾器應用到列上? – RobVious

+0

@RobVious可能有幾種方法可以做到這一點,你可以創建一個[sql小提琴](http://sqlfiddle.com/)與一些示例數據,包括日期? – Taryn