我试图将多列中重复行(具有相同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的总和加倍。
答案 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进行聚合。