sql sum在多列中重复

时间:2016-11-07 14:38:32

标签: sql sql-server tsql

我试图将多列中重复行(具有相同ID,月和人)的值与第一个或最后一个重复行相加。然后删除重复行,并使用总值删除一行。 最大的问题是有时我需要在两个不同的列中对值进行求和。

PrimaryTable:

  ID Month Person  Value1 Value2
**123  1   Smith**   10     20  
**123  1   Smith**   5      NULL
**123  1   Smith**   NULL   5
  123  2   Smith     10     5
**189  3   Murphy**  NULL   15 
**189  3   Murphy**  NULL   10 
  190  2   Brown     25     25
**345  2   Lee**     25     20 
**345  2   Lee**     25     20 

Result1(总和重复值到第一个后的预期结果):

ID Month Person Value1 Value2
123  1    Smith **15** **25** 
123  1    Smith   5      NULL
123  1    Smith   NULL   5
123  2    Smith   10     5 
189  3    Murphy  NULL **25** 
189  3    Murphy  NULL   10
190  2    Brown   25     25
345  2    Lee   **50** **40**
345  2    Lee     25     20 

FinalTable(删除重复项后的预期结果,第一项除外):

ID Month Person Value1 Value2
123  1    Smith **15** **25** 
123  2    Smith   10     5 
189  3    Murphy  NULL **25** 
190  2    Brown   25     25
345  2    Lee   **50** **40** 

我正在尝试使用此代码:

SELECT ID, Month, Person, SUM(Value1), SumValue2
FROM
(
    SELECT ID, Month, Person, Value1, SUM(Value2) AS SumValue2
    FROM db.Hours
    GROUP BY ID, Month, Person, Value1
 )
 GROUP BY ID, Month, Person, SumValue2

但有时它会使Value2的总和加倍。

1 个答案:

答案 0 :(得分:0)

SELECT ID, Month, Person, SUM(Value1) as SumValue1, SUM(Value2) AS SumValue2
FROM db.Hours
GROUP BY ID, Month, Person

我不确定您为什么将此视为两个步骤等。没有删除重复项等。这是Group By Aggregation的方案。您对行进行分组并汇总值列的位置。您需要将此操作作为多步操作的唯一原因是,如果您的某个值列中的某个值将被视为您的分组,例如ID,月,人和值1。在您的情况下,您只需要按ID,Month,Person进行分组,并对Value1和Value2进行聚合。