繁体   English   中英

尝试将 INNER JOIN 和 GROUP BY SQL 与 SUM 函数一起使用,但不起作用

[英]Trying to use INNER JOIN and GROUP BY SQL with SUM Function, Not Working

我不明白这个问题,想知道是否有人可以帮助我解决这个问题。

我有 2 个名为RES_DATAINV_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM