[英]Trying to use INNER JOIN and GROUP BY SQL with SUM Function, Not Working
我不明白這個問題,想知道是否有人可以幫助我解決這個問題。
我有 2 個名為RES_DATA
和INV_DATA
表
RES_DATA
包含我的客戶如下
CUSTOMER ID | NAME
1, Robert
2, John
3, Peter
INV_DATA
包含他們的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
我想我需要 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]
列求和時,它會保持左側的一行完整,並匯總右側的匹配值.
有兩種方法可以做到...
通過...分組
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]
如果您需要檢索除 group by 列之外的更多列,則可以考慮以下查詢。 檢查一次它是否表現良好。
SELECT
a.[CUSTOMER ID],
a.[NAME],
(select SUM(b.[AMOUNT]) from INV_DATA b
where b.[CUSTOMER ID] = a.[CUSTOMER ID]
GROUP BY b.[CUSTOMER ID]) AS [TOTAL AMOUNT]
FROM RES_DATA a
SELECT RES.[CUSTOMER ID], RES.NAME, SUM(INV.AMOUNT) AS [TOTAL AMOUNT]
FROM RES_DATA
JOIN INV_DATA ON RES.[CUSTOMER ID]=INV.[CUSTOMER ID]
GROUP BY RES.[CUSTOMER ID], RES.NAME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.