#sql #sql-server #tsql #sql-server-2012
#sql #sql-сервер #tsql #sql-server-2012
Вопрос:
Мне не хватает данных при выборе некоторых переменных «season». Я полагаю, что проблема заключается в предложении 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
Например, это данные, которые у меня есть:
Это данные, которые я получаю за 2019 год
Но это данные, которые я хочу получить на 2019 год
Ответ №1:
Попробуйте переместить WHERE
предложение в ON
предложение (и вы можете опустить эту OR
часть).:
...
LEFT JOIN hours b
ON a.customerid = b.customerid
AND b.season = @Season
...