#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 . . . Это было бы проще проследить в другом вопросе.