Я пытаюсь обойтись без использования оператора CASE
в предложении ORDER BY
, используя DISTINCT
в список SELECT
и обнаружил странное поведение, которое я не понимаю. Вот код:
select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'c' then BU
else ISO_ID
end
Это работает. Но если я изменю 4-ю строку на , когда 'b' = 'b', тогда BU
:
select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'b' then BU
else ISO_ID
end
она прерывается с ошибкой:
Элементы ORDER BY должны появиться в списке выбора, если SELECT DISTINCT равен { {1}} указано.
Когда BU
явно находится в списке выбора. Еще более странно, когда я меняю код на:
select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'b' then BU
else BU --change is here
end
Он снова работает! Как это вообще имеет смысл? Может ли кто-нибудь помочь мне разобраться в этом?