Извините, если это дубликат, но я его не нашел. Почему я не могу использовать свой псевдоним столбца, определенный в SELECT
, из ORDER BY
, когда я использую CASE
?
Рассмотрим этот простой запрос:
SELECT NewValue=CASE WHEN Value IS NULL THEN '<Null-Value>' ELSE Value END
FROM dbo.TableA
ORDER BY CASE WHEN NewValue='<Null-Value>' THEN 1 ELSE 0 END
В результате возникает ошибка:
Недопустимое имя столбца 'NewValue'
Здесь sql-скрипт. (Замените ORDER BY NewValue
на CASE WHEN...
, который был закомментирован)
Я знаю, что в этом случае я могу использовать ORDER BY CASE WHEN Value IS NULL THEN 1 ELSE 0 END
как здесь, но на самом деле запрос является более сложным и я хочу, чтобы он был максимально читабельным. Должен ли я использовать подзапрос или CTE, если да, почему это так?
Обновить, так как Микаэль Эрикссон прокомментировал любое выражение в сочетании с псевдонимом не допускается. Поэтому даже этот (бессмысленный запрос) выходит по той же причине:
SELECT '' As Empty
FROM dbo.TableA
ORDER BY Empty + ''
Результат:
Недопустимое имя столбца "Пусто".
Таким образом, псевдоним разрешен в ORDER BY
, а также выражение, но не оба. Почему, это слишком сложно реализовать? Поскольку я в основном программист, я считаю псевдонимы как переменные, которые можно было бы просто использовать в выражении.