Отсутствуют данные при объединении таблиц - PullRequest
0 голосов
/ 17 апреля 2019

Мне не хватает данных, когда я выбираю некоторые "сезонные" переменные. Я полагаю, что проблема заключается в предложении 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 голосов
/ 17 апреля 2019

Попробуйте переместить предложение WHERE в предложение ON (и вы можете опустить часть OR):

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