2016-11-07 15 views
-3

最初の行または最後の重複する行に対して、複数の列にある重複する行(同じID、月、およびPerson)の値を合計しようとしています。次に、重複した行を削除して、合計値で1行を削除します。 最大の問題は、2つの異なる列で値を合計する必要があることがあることです。複数の列で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 

結果1(期待される結果合計が最初のものに値を複製した後):

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の合計を2倍にすることがあります。

+1

これまで行っていた作業は表示されませんでした。これは、コード作成(またはクエリ作成)サービスではありません。質問を編集して、何をしたのか、どこに問題があるのか​​を表示します。 –

+0

HInt: 'GROUP BY'。 –

+0

最初または最後の行がありません。 – jarlh

答えて

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

次の2つの手順などとしてこれを見ている私はなぜわからないなど、重複のない除去は、これがグループ化集計のためのシナリオではありません。列のようにグループ化し、値の列をまとめます。これを複数ステップの操作にする必要がある唯一の理由は、値列の1つがグループ内で考慮される場合です。 ID、月、人、および値1。あなたの場合、単にID、月、人でグループ化し、Value1とValue2の集計を行うだけです。

関連する問題