[英]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.