尝试使用INNER JOIN和GROUP BY SQL与SUM函数,不工作

Rob*_*236 14 sql select join group-by inner-join

我没有理解这一点,并想知道是否有人可以帮助我.

我有2个表叫做RES_DATAINV_DATA

RES_DATA 包含我的客户,如下所示

CUSTOMER ID | NAME

1, Robert
2, John
3, Peter
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试写一个SELECT声明,它将给我如下结果.

CUSTOMER ID | NAME | TOTAL AMOUNT

1, Robert, £180.90
2, John, £400.00
3, Peter, £150.00
Run Code Online (Sandbox Code Playgroud)

我想我需要2个INNER JOINS以某种方式添加INVOICES表的表和SUM值BY GROUP BY Customer Table但老实说我认为我遗漏了一些东西.甚至无法接近我需要的结果.

ror*_*.ap 21

这应该工作.

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]
Run Code Online (Sandbox Code Playgroud)

我使用SQL Fiddle对SQL Server 2008进行了测试:http://sqlfiddle.com/#!3/1cad5/1

基本上,这里发生的是,由于连接,您在"左"(即从RES_DATA表中)获得INV_DATA具有相同[CUSTOMER ID]值的"右"(即表)上的每一行的相同行.当您仅按左侧的列进行分组,然后仅对[AMOUNT]右侧的列进行求和时,它会使左侧的一行保持不变,并将右侧的匹配值相加.


Hog*_*gan 6

两种方法......

通过...分组

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
Run Code Online (Sandbox Code Playgroud)

过度

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]
Run Code Online (Sandbox Code Playgroud)