2010-02-11 47 views
2

我有一個表,一個簡單的表,只有3個字段。需要一個創新的Sql查詢::幫助

ID Type Date

數據(記錄表示的300 3)的實施例

154 |頁面| 2010-02-08

154 |鏈接| 2010-02-08

154 |表格| 2010-02-08

編號:只是爲客戶端ID

類型:只能是已填充( '形', '網頁', '鏈接')

3件事

日期:創建日期

每個ID有多個條目。

我想創建,讓我以下輸出所需輸出的

實施例的存儲過程或查詢/計數

ID |鏈接|表格|頁

154 | 75 | 40 | 100

我只想每個類型的計數,所以我不必做3個獨立的SQL調用來獲得每個類型的計數。任何幫助將不勝感激,這將需要去一個存儲過程,並且我想要基於此的所有ID是ID。

在此先感謝

回答

4

你可能想是這樣的

Select id 
, Sum(Case when Type='Link' then 1 else 0 end) as Links 
, Sum(Case when Type='Forms' then 1 else 0 end) as Forms 
, Sum(Case when Type='Page' then 1 else 0 end) as Pages 
From SomeTable 
Group by ID 
+0

完美!謝謝你,先生! – sia 2010-02-12 15:36:35

+0

很高興我能幫到你。 – cmsjr 2010-02-12 15:38:53

1

試試這個(SQL Server)的

SELECT 
    [ID] 
     ,SUM(CASE TYPE WHEN 'LINK' THEN 1 ELSE 0 END) AS [Link] 
     ,SUM(CASE TYPE WHEN 'FORMS' THEN 1 ELSE 0 END) AS [FORMS] 
     ,SUM(CASE TYPE WHEN 'PAGE' THEN 1 ELSE 0 END) AS [Page] 
    FROM yourTable 
    GROUP BY ID  --remove this line if you are passing in a single @GivenID 
    WHERE [email protected] --remove this line if you want counts for all IDs (returns many rows) 
2

一個簡單的PIVOT查詢應該解決的問題

SELECT * 
FROM SimpleTable 
PIVOT 
(
    COUNT(Date) 
    FOR Type IN ([Link], [Form], [Page]) 
) AS t 
+0

+1只需添加一個ID過濾器即可選擇每個ID所需的結果,而且非常完美 – 2010-02-11 20:54:21