2008-10-30 197 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