SQL sum дублируется в нескольких столбцах

Я пытаюсь суммировать значения из повторяющихся строк (с тем же идентификатором, месяцем и человеком) в нескольких столбцах до первой или последней повторяющейся строки. Затем удалите повторяющиеся строки, за исключением строки с общим значением.
Самая большая проблема заключается в том, что иногда мне нужно суммировать значения в двух разных столбцах.

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 (ожидаемый результат после sum дублирует значения к первому):

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

Но иногда это составляет двойную сумму общей Значения2.

1 ответ

  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, месяцу, человеку и сделать агрегацию для Value1 и Value2.