Возвращает строку со значениями столбца или отсутствует

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть SQL-запрос следующим образом в последней версии MS-SQL:

SELECT s.* FROM catalogue l INNER JOIN uom s ON s.SAPUom = l.Uom AND l.Id = 5

с выводом следующего вида

введите описание изображения здесь

Если в таблице есть сопоставление uom CompID и SupplierID (строка 2), верните это, else, верните uom, который равен NULL (строка 1)

Любая помощь была бы оценена

Ответ №1:

Если вам нужна одна строка, то один метод использует ORDER BY :

 SELECT TOP (1) s.*
FROM catalogue l INNER JOIN 
     uom s
     ON s.SAPUom = l.Uom AND l.Id = 5
ORDER BY (CASE WHEN compid is not null OR supplierid is not null THEN 1 ELSE 2 END);
  

Комментарии:

1. Спасибо Гордону, который ответил на вопрос. Могу ли я задать расширение вопроса? Если бы я собирался использовать оператор IN like (что я на самом деле и делаю), как бы вы это расширили? ВЫБЕРИТЕ ВЕРХНИЕ (1) строки.* Из каталога l ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ uom s На s.SAPUom = l.Uom И l.Id В порядке (4,5) (СЛУЧАЙ, КОГДА compid не равен нулю ИЛИ supplierid не равен нулю, ТОГДА 1 ЕЩЕ 2 ЗАКАНЧИВАЮТСЯ)? Могу задать другой вопрос, если вы предпочитаете

2. @Kevin . . . Это было бы проще проследить в другом вопросе.