SQL Server查询LEFT JOIN,SUM和GROUP BY,我很难过!

She*_*dog 9 sql-server join group-by sum

我正在击败这个人

我有3个SQL Server 2005表

userawards:

id, awardamount, userid, dateawarded, awardtypeid 
Run Code Online (Sandbox Code Playgroud)

用户:

id, firstname, lastname
Run Code Online (Sandbox Code Playgroud)

awardtypes:

id, title
Run Code Online (Sandbox Code Playgroud)

所以如果awards表有行

1, 300.00, 3, 01-01-2011, 1
2, 125.00, 3, 01-05-2011, 1
3,  50.00, 2, 01-05-2011, 2
Run Code Online (Sandbox Code Playgroud)

用户表行

1, john, smith
2, mark, smith
3, bob, smith
Run Code Online (Sandbox Code Playgroud)

奖项类型

1, cash
2, prize
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来与此类似

bob smith, 425.00, cash
mark smith, 50, prize
Run Code Online (Sandbox Code Playgroud)

等等

用户可以拥有多个奖励,结果需要显示唯一的用户,但总奖励金额.此外,还需要有2个连接,一个用于获取用户表中的用户名/最后一个和奖励类型标题.

所以我的查询看起来像这样(我知道它不起作用)

SELECT id, userid, awardtypeid, SUM(awardamount) 
FROM awards a
LEFT JOIN userinfo ui ON ui.userid = a,userid
LEFT JOIN awardtypes ON awardtypesid = a.awardtypeid
GROUP BY userid
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

Con*_*rix 18

你可能想要

SELECT userid, 
       awardtypeid, 
       SUM(awardamount) 
FROM   awards a 
       LEFT JOIN userinfo ui 
         ON ui.userid = a.userid 
       LEFT JOIN awardtypes 
         ON awardtypesid = a.awardtypeid 
GROUP  BY userid, 
          awardtypeid 
Run Code Online (Sandbox Code Playgroud)

要么

SELECT userid, 
       SUM(awardamount) 
FROM   awards a 
       LEFT JOIN userinfo ui 
         ON ui.userid = a.userid 
       LEFT JOIN awardtypes 
         ON awardtypesid = a.awardtypeid 
GROUP  BY userid
Run Code Online (Sandbox Code Playgroud)

这会丢弃id列(可能不是你要分组的)

在第一种情况下,我在选择中包含了awardtypeid,但这意味着您还必须将其添加到组中.