我正在尝试将多个列中重复行(具有相同的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的总数加倍。
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进行汇总。