Мыслительный процесс синтаксиса CASE в SQL
У меня есть следующий код (я использую базу данных Northwind), который дает мне результат, показанный на этом рисунке
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
INNER JOIN orders b
ON a.EmployeeID = b.EmployeeID
LEFT JOIN customers c
ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';
Код выше объединяет три таблицы и выбирает только строки с a.TitleOfCourtesy = 'Ms.'
Из результата я хочу взять строки, которые имеют %1992%
в столбце a.Notes
и показывать только те строки, которые имеют c.CustomerYear
равен 1992. Поэтому на картинке ранее я должен видеть только второй верхний ряд.
Я думал, что мог бы использовать синтаксис CASE + WHEN для создания своего рода оператора IF, но я получаю недопустимое использование синтаксиса только в строке CASE. Следует ли перемещать деталь CASE после детали WHERE или я использую ее совершенно неправильно?
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
CASE
WHEN a.Notes LIKE '%1992%' THEN c.CustomerYear LIKE '1992'
ELSE NULL END
FROM employees a
INNER JOIN orders b
ON a.EmployeeID = b.EmployeeID
LEFT JOIN customers c
ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';
Как я должен думать, чтобы достичь желаемого результата?
1 ответ
Вам просто нужно расширить WHERE
пункт...
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
INNER JOIN orders b
ON a.EmployeeID = b.EmployeeID
LEFT JOIN customers c
ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
AND a.Notes LIKE '%1992%'
AND c.CustomerYear LIKE '1992';
Я также вижу только одну подходящую строку на вашем изображении, а не две. Так что, возможно, я неправильно понял, чего вы хотите достичь... Может быть, вы хотите, чтобы это получилось в два ряда?
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
INNER JOIN orders b
ON a.EmployeeID = b.EmployeeID
LEFT JOIN customers c
ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
AND a.Notes LIKE '%1992%'
AND (c.CustomerYear LIKE '1992' OR c.CustomerYear IS NULL)
Наконец, вам не нужно LIKE '1992'
Вы можете просто использовать = '1992'
и если значение является целым числом, просто используйте = 1992
...