SQL Server - 根据不同的分组对2个字段求和的最佳方法

时间:2016-03-29 17:39:44

标签: sql-server group-by aggregate-functions

假设我在SQL Server中有一个表格,如下所示:

MyTable:
Col1:     Col2:    Col3:     Val1:     Val2:
1         2        a         1         1
1         2        a         1         1
1         2        b         1         1
1         2        b         1         1
1         2        c         1         1
1         2        c         1         1

所以,我希望创建一个返回的查询:

  1. Sum(Val1)基于Col1Col2Col3
  2. 中的值

    AND

    1. Sum(Val2)基于Col1Col2
    2. 中的值

      所以,我提出了以下可以实现此目的的查询:

      with MyData as
      (
          select distinct
              Col1
              , Col2
              , Col3
              , sum(Val1) over(partition by Col1, Col2, Col3) as Value1,
              , sum(Val2) over(partition by Col1, Col2) as Value2
          from 
              MyTable
      )
      
      Select * from MyData
      

      产生以下内容:

      Result:
      Col1:     Col2:    Col3:     Value1:     Value2:
      1         2        a         2           6
      1         2        b         2           6
      1         2        c         2           6
      

      这很有效,但由于Distinct,它似乎非常低效 - 是否有更好的方法来实现这一目标?

      谢谢!

1 个答案:

答案 0 :(得分:1)

我不会将DISTINCT描述为非常低效的#34;而不是,我认为没有更好的方式""达到理想的效果。