【问题标题】:Summarize aggregated data汇总汇总数据
【发布时间】: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


    【解决方案1】:
    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;
    

    【讨论】:

      【解决方案2】:

      好的...这是使用 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)
      

      【讨论】:

      • 嗨 Marlon,我也尝试了这个解决方案,虽然我没有看到执行时间方面的任何改进,但我认为这个解决方案非常优雅,并且以后易于修改。非常感谢。
      • 仅将样本数据作为测试负载,它们的性能并没有太大差异。我认为这个 PIVOT 是这种数据需求的首选解决方案。
      【解决方案3】:

      这称为表格旋转。在您的简单情况下,只有两列;一般来说,可能有200个左右的国家,在这种情况下,转向变得相当困难。

      网上有很多资源描述了如何做到这一点:Google for 'pivot table sql'。

      【讨论】:

        【解决方案4】:

        在 SQL 2005 或更高版本中 - SQL 关键字“Pivot”为您执行此操作, 查看以下链接:

        http://msdn.microsoft.com/en-us/library/ms177410.aspx

        【讨论】:

          【解决方案5】:

          我认为您可以使用此链接:

          Sum of unique records - better performance than a cursor

          我认为使用 PIVOT 函数具有最佳性能评估器 SUM() 函数。!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-12-05
            • 2018-04-23
            • 2017-01-19
            • 2018-05-07
            • 1970-01-01
            • 1970-01-01
            • 2011-07-09
            • 2016-07-26
            相关资源
            最近更新 更多