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

我有2个表分别称为RES_DATAINV_DATA

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


我想我需要2个INNER JOINS以某种方式添加按客户表分组的INVOICES表的表和SUM值,但说实话我认为我缺少了一些东西。甚至无法接近我需要的结果。

最佳答案

这应该工作。

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]列进行求和时,它将使左侧的一行保持完整,并从右侧对匹配值求和。

07-27 15:28