Случай, когда заявление - три столбца - PullRequest
0 голосов
/ 09 января 2020

Расширенный случай, когда оператор в T- SQL использует три столбца

Надеюсь, что кто-то может помочь со следующим:)

У меня есть две таблицы в SQL.

  • Таблица 1 имеет 4 столбца - person_id, A, B и C.
  • Таблица 2 имеет 3 столбца поиска - A, B и C

Я хочу выполнить следующее:

  • Взгляд вниз в Таблице 1, столбец A, найдите значение в Таблице 2, столбец A
  • Если нет значения, go в таблицу 1, столбец B.
  • Просмотрите таблицу 1, столбец B, найдите значение в таблице 2, столбец B
  • Если нет значения, go в таблицу 1, столбец C
  • Посмотрите на таблицу 1, столбец C, найдите значение в таблице 2, column C
  • Если в каком-либо столбце нет значений, укажите 'Null'

Так что я знаю, как написать простой случай, когда оператор. Тем не менее, я думаю, что «случай, когда» работает только на одном столбце. Я начал писать код, но мне нужна помощь, чтобы понять его правильно.

Select person_id, 
case when 1.A is not null then 2.A
when 1.B is not null then 2.B
else 1.C
end as CODE
from table 1
left join table 2
Order by person_id

Буду признателен за любую помощь, которую вы можете оказать, спасибо.

1 Ответ

0 голосов
/ 09 января 2020

Ваш sql кажется в основном правильным, за исключением else 1.C.

, поскольку CASE WHEN вернет 1 значение в зависимости от первого положительного критерия WHEN.

И CASE возвращает NULL по умолчанию.
Так что ELSE null на самом деле не требуется.

Описания таблиц действительно указывают, что Table2 содержит только 1 строку.

Если это так, то вы можете присоединиться к ним.

SELECT t1.person_id, 
CASE 
WHEN t1.A IS NOT NULL THEN t2.A
WHEN t1.B IS NOT NULL THEN t2.B
WHEN t1.C IS NOT NULL THEN t2.C
END AS [CODE]
FROM [Table 1] t1
CROSS JOIN (
   SELECT TOP 1 A, B, C
   FROM [Table 2]
   ORDER BY A DESC, B DESC, C DESC
) t2
...