带连接的SQL加法可以返回空值

时间:2018-08-31 12:01:09

标签: sql sql-server

Table1Table2都包含名为UsernameScore的列。 Table1确保拥有查询所需的所有用户,而Table2仅拥有这些用户的一部分。我如何编写此查询,以便即使Table2不包含匹配的用户,我也总是得到两个表的总分?换句话说,如果Table2中为null,我想将其视为零。

            Table1    Table2
User1       200       100
User2       200       NULL
User3       200       300

User1 TotalScore = 300
User2 TotalScore = 200
User3 TotalScore = 500

4 个答案:

答案 0 :(得分:4)

我认为简单的聚合就可以解决问题

Select UserName
      ,Score=sum(Score)
 From (
        Select UserName,Score From Table1
        Union All
        Select UserName,Score From Table2
      ) A
 Group By UserName

答案 1 :(得分:3)

使用COALESCE进行空检查,并与表2左连接

select username, COALESCE(Table1,0) + COALESCE( Table2,0) from t

因此完整的查询将

    select t1.username,t1.value as table1_value,
   t2.value as table2_value,
   COALESCE(t1.value,0) + COALESCE( t2.value,0) as TotalScore
   from t1 left join t2 on t1.username =t2.username

答案 2 :(得分:1)

LEFT JOIN将确保您将从Table1中获得所有用户。 如果Table2中不存在特定用户,则该表中该用户的值将为NULL,要将其视为0,则需要使用COALESCE

尝试一下:

select t1.username, 
       t1.score,
       t2.score,
       t1.score + coalesce(t2.score, 0) totalScore
from table1 t1
left join table2 t2 on t1.username = t2.username

答案 3 :(得分:1)

使用左连接进行连接,并合并将NULL合并为0。