我没有解决这个问题,想知道是否有人可以帮助我。
我有2个表分别称为RES_DATA
和INV_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]
列进行求和时,它将使左侧的一行保持完整,并从右侧对匹配值求和。