2008-10-30 285 views
4

我有一個表像如下:彙總彙總數據

 
SoftwareName Count Country 
Project   15  Canada 
Visio   12  Canada 
Project   10  USA 
Visio   5  USA 

如何查詢它給我的總結一樣......

 
SoftwareName Canada USA Total 
Project   15  10  25 
Visio   12  5  17 

如何在T-SQL嗎?

回答

6
SELECT SoftwareName, 
    SUM(CASE Country WHEN 'Canada' THEN [Count] ELSE 0 END) AS Canada, 
    SUM(CASE Country WHEN 'USA' THEN [Count] ELSE 0 END) AS USA, 
    SUM([Count]) AS Total 
FROM [Table] 
GROUP BY SoftwareName; 
1

這被稱爲表旋轉。在你的簡單情況下,只有兩列;總的來說,可能會有200個左右的國家,在這種情況下,這種轉變變得相當困難。

有許多資源在線描述如何做到這一點:谷歌'樞軸表sql'。

在SQL 2005
3

OK ......下面介紹如何使用PIVOT做到這一點:

SELECT Softwarename, Canada, USA, Canada + USA As TOTAL from SoftwareDemo 
PIVOT 
    (
    SUM([Count]) 
    FOR Country 
    IN (Canada, USA) 
    ) AS x 


Softwarename          Canada  USA   TOTAL 
-------------------------------------------------- ----------- ----------- ----------- 
Project           15   10   25 
Visio            12   5   17 

(2 row(s) affected) 
+0

您好Marlon,我也試過這個解決方案,儘管我在執行時間方面沒有看到任何改進,但我認爲這個解決方案非常優雅,並且以後很容易修改。非常感謝。 – sammydc 2008-10-30 18:44:07