Sql 汇总汇总数据
我有一张如下的桌子: SoftwareName Count Country Project 15 Canada Visio 12 Canada Project 10 USA Visio 5 USA 软件名计数国家/地区 项目15加拿大 Visio 12加拿大 项目10美国 Visio 5美国 我如何查询它来给我一个像 SoftwareName Canada USA Total Project 15 10 25 Visio 12 5 17 SoftwareName加拿大美国总计 项目15 10 25 Visio 12 5 17Sql 汇总汇总数据,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有一张如下的桌子: SoftwareName Count Country Project 15 Canada Visio 12 Canada Project 10 USA Visio 5 USA 软件名计数国家/地区 项目15加拿大 Visio 12加拿大 项目10美国 Visio 5美国 我如何查询它来给我一个像 SoftwareName Canada
如何在T-SQL中执行此操作?这称为表数据透视。在您的简单示例中,只有两列;一般来说,可能有200多个国家,在这种情况下,旋转变得相当困难
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;
网上有很多资源介绍了如何实现这一点:谷歌搜索“pivot table sql”。在sql 2005或更高版本中,有sql关键字“pivot”为您实现这一点, 查看以下链接:
好的……以下是使用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)
我想你可以使用这个链接:
我认为使用PIVOT函数有一个性能最好的rater SUM()函数 你好,Marlon,我也尝试过这个解决方案,虽然我没有看到在执行时间方面有任何改进,但我认为这个解决方案非常优雅,以后很容易修改。非常感谢。只有样本数据作为测试负载,它们的性能没有太大差异。我认为,对于此类数据需求,此PIVOT是首选解决方案。