私はこれについて頭を悩ませていませんし、誰かがこれで私を助けることができるのではないかと思いました。
RES_DATA
とINV_DATA
という2つのテーブルがあります
RES_DATA
以下のように私の顧客が含まれています
CUSTOMER ID | NAME
1, Robert
2, John
3, Peter
INV_DATA
以下のように彼らの請求書が含まれています
INVOICE ID | CUSTOMER ID | AMOUNT
100, 1, £49.95
200, 1, £105.95
300, 2, £400.00
400, 3, £150.00
500, 1, £25.00
私はSELECT
ステートメントを書き込もうとしていますが、これは以下のような結果をもたらします。
CUSTOMER ID | NAME | TOTAL AMOUNT
1, Robert, £180.90
2, John, £400.00
3, Peter, £150.00
Customerテーブルによってグループ化されたINVOICESテーブルのテーブルとSUM値を何らかの方法で追加するには、2つの内部結合が必要だと思いますが、正直なところ、何かが足りないと思います。必要な結果に近づくことさえできません。
これは動作するはずです。
SELECT a.[CUSTOMER ID], a.[NAME], SUM(b.[AMOUNT]) AS [TOTAL AMOUNT]
FROM RES_DATA a INNER JOIN INV_DATA b
ON a.[CUSTOMER ID]=b.[CUSTOMER ID]
GROUP BY a.[CUSTOMER ID], a.[NAME]
SQL Fiddle SQL Server 2008に対してテストしました: http://sqlfiddle.com/#!3/1cad5/1
基本的にここで行われているのは、結合のために、「左」に同じ行を取得しているということです(つまり、RES_DATA
テーブル)「右側」のすべての行(つまり、INV_DATA
テーブル)同じ[CUSTOMER ID]
値。左側の列だけでグループ化し、[AMOUNT]
列を右側から挿入します。左側から1行をそのまま保持し、右側から一致する値を合計します。
それを行う2つの方法...
GROUP BY
SELECT RES.[CUSTOMER ID], RES,NAME, SUM(INV.AMOUNT) AS [TOTAL AMOUNT]
FROM RES_DATA RES
JOIN INV_DATA INV ON RES.[CUSTOMER ID] INV.[CUSTOMER ID]
GROUP BY RES.[CUSTOMER ID], RES,NAME
オーバー
SELECT RES.[CUSTOMER ID], RES,NAME,
SUM(INV.AMOUNT) OVER (PARTITION RES.[CUSTOMER ID]) AS [TOTAL AMOUNT]
FROM RES_DATA RES
JOIN INV_DATA INV ON RES.[CUSTOMER ID] INV.[CUSTOMER ID]
サブクエリを使用
SELECT * FROM RES_DATA inner join (SELECT [CUSTOMER ID], sum([TOTAL AMOUNT]) FROM INV_DATA group by [CUSTOMER ID]) T on RES_DATA.[CUSTOMER ID] = t.[CUSTOMER ID]