【发布时间】:2008-10-30 01:21:48
【问题描述】:
我有一张如下表:
软件名称计数国家 项目 15 加拿大 Visio 12 加拿大 项目 10 美国 Visio 5 美国我如何查询它以给我一个总结,如...
软件名称 加拿大 美国 总计 项目 15 10 25 视觉 12 5 17在T-SQL中怎么做?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql
我有一张如下表:
软件名称计数国家 项目 15 加拿大 Visio 12 加拿大 项目 10 美国 Visio 5 美国我如何查询它以给我一个总结,如...
软件名称 加拿大 美国 总计 项目 15 10 25 视觉 12 5 17在T-SQL中怎么做?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql
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 的方法:
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)
【讨论】:
这称为表格旋转。在您的简单情况下,只有两列;一般来说,可能有200个左右的国家,在这种情况下,转向变得相当困难。
网上有很多资源描述了如何做到这一点:Google for 'pivot table sql'。
【讨论】:
在 SQL 2005 或更高版本中 - SQL 关键字“Pivot”为您执行此操作, 查看以下链接:
【讨论】:
我认为您可以使用此链接:
Sum of unique records - better performance than a cursor
我认为使用 PIVOT 函数具有最佳性能评估器 SUM() 函数。!
【讨论】: