连接表时缺少数据

时间:2019-04-16 21:22:57

标签: sql sql-server tsql sql-server-2012

当我选择一些“季节”变量时,我缺少数据。我认为问题在于where子句。我使用:

"where season = @season Or season IS NULL"

这使我可以从表a中获取所有数据,并从表b中匹配特定季节的数据。这在某些季节有效,对其他季节则不然。对于2018赛季,我希望从表a中获得所有行。但是如果我使用2019赛季,它将忽略所有没有空值的记录

我正在使用的选择命令是:

SELECT    a.customerid,
          a.lname,
          a.fname,
          b.customerid,
          b.mtg1,
          b.mtg2,
          b.mtg3,
          b.mtg4,
          (COALESCE(Sum(b.mtg1), 0) + COALESCE(Sum(b.mtg2), 0) + COALESCE(Sum(b.mtg3), 0) + COALESCE(Sum(b.mtg4), 0)) AS total
FROM      customer a
LEFT JOIN hours b
ON        a.customerid = b.customerid
WHERE     b.season = @Season
OR        b.season IS NULL
GROUP BY  a.customerid,
          a.lname,
          a.fname,
          b.customerid,
          b.mtg1,
          b.mtg2,
          b.mtg3,
          b.mtg4,
ORDER BY  a.lname 

例如,这是我的数据:

enter image description here

enter image description here

这是我获得的2019年数据

enter image description here

但这是我想要的2019年数据

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试将WHERE子句中的ON子句移动(您可以省略OR部分):

...
LEFT JOIN hours b
ON        a.customerid = b.customerid
AND       b.season = @Season
...