Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 汇总汇总数据_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

Sql 汇总汇总数据

Sql 汇总汇总数据,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

我有一张如下的桌子:

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 17
如何在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是首选解决方案。