小编典典

sql总和在多列中重复

sql

我正在尝试将多个列中重复行(具有相同的ID,Month和Person)的值求和到第一行或最后一个重复行。然后删除重复的行,除以总值。最大的问题是,有时我需要对两个不同的列中的值求和。

主表:

  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的总数加倍。


阅读 159

收藏
2021-04-15

共1个答案

小编典典

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

我不确定您为什么将其视为两个步骤,等等。没有删除重复项等。这是“按汇总”分组的方案。在哪里像行一样分组并汇总值列。您需要进行此多步骤操作的唯一原因是,如果将在您的分组中考虑其中一个值列,例如ID,Month,Person和Value1。在您的情况下,您只需要按ID,Month,Person分组并为Value1和Value2进行汇总。

2021-04-15