Понимание запроса к серверу Sql - CASE в предложении ORDER BY

Я пытаюсь обойтись без использования оператора 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

Он снова работает! Как это вообще имеет смысл? Может ли кто-нибудь помочь мне разобраться в этом?

7
задан Nick Rolando 9 November 2011 в 22:22
поделиться