Использование псевдонимов в разделе "Где" или "Альтернативный вариант"?
Как я могу заставить это работать, он работает без предложения Where, в противном случае с предложением Where, я получаю очевидную ошибку, но в основном, что нужно сделать, кто-нибудь знает, как подойти к этому?
select ID,
Name,
case T.N
when 1 then City1
when 2 then City2
when 3 then City3
end as City,
case T.N
when 1 then State1
when 2 then State2
when 3 then State3
end as State
from YourTable
cross join (values(1),(2),(3)) as T(N)
Where City is NOT Null
Ответы
Ответ 1
Вы не можете использовать псевдоним в предложении WHERE. Либо повторите выражение (messy), либо положите SELECT в подзапрос, а затем поместите предложение WHERE во внешний запрос:
SELECT Id, Name, City, State
FROM
(
SELECT
ID,
Name,
CASE T.N
WHEN 1 THEN City1
WHEN 2 THEN City2
WHEN 3 THEN City3
END AS City,
CASE T.N
WHEN 1 THEN State1
WHEN 2 THEN State2
WHEN 3 THEN State3
END AS State
FROM YourTable
CROSS JOIN (VALUES(1),(2),(3)) AS T(N)
) T1
WHERE City IS NOT NULL
Ответ 2
Вы не можете использовать псевдоним (из предложения SELECT
) в WHERE
, потому что порядок логической обработки (раздел: Logical Processing Order of the SELECT statement
) составляет WHERE
, а затем SELECT
:
FROM
ON
JOIN
WHERE <--
GROUP BY
WITH CUBE or WITH ROLLUP
HAVING
SELECT <--
DISTINCT
ORDER BY <--
TOP
Но вы можете использовать псевдоним в ORDER BY
:
SELECT h.SalesOrderID, YEAR(h.OrderDate) OrderYear
FROM Sales.SalesOrderHeader h
ORDER BY OrderYear;
Решения: см. решения, представленные Марк Байерсом.
Тибор Карасзи: Почему у нас нет псевдонима столбца в ORDER BY?