У меня проблемы с формулировкой этой проблемы, и, возможно, это лучше всего объяснить с помощью кода.
Я пишу запрос, который возвращает только те строки, которые имеют определенный приоритет. Для каждой строки, которую он возвращает с этим приоритетом, он также должен выполнить новый запрос, но на этот раз с другим приоритетом (второй запрос может не вернуть никаких строк). Окончательный результат - это объединенные результаты обоих запросов.
Итак, код, который у меня сейчас есть, выглядит следующим образом:
SELECT I.ItemNumber, I.FromLocation, I.ToLocation
FROM ItemLocation AS I
INNER JOIN Delivery AS D
ON I.ItemNumber = D.ItemNumber
AND I.FromLocation = D.FromLocation
AND I.ToLocation = D.ToLocation
WHERE I.Priority IN ('A', 'C')
AND D.DeliveryStart > 20191001
Проблема с этим запросом состоит в том, что мне нужны только ItemNumbers сприоритет 'C'
, если были какие-либо номера элементов с приоритетом 'A'
. Теперь я получаю их все независимо. И если 'A'
не возвращает какие-либо строки, он должен выполнить тот же запрос, но заменить Приоритет 'A'
на 'B'
, чтобы новое (но все еще ошибочное) предложение WHERE
быть:
WHERE I.Priority IN ('B', 'C')
Я пытался обработать эту логику в коде, но этот подход потребует нескольких запросов, что, к сожалению, резко снижает производительность.
Есть ли способ сделать это в запрос SQL?