Использование псевдонимов в разделе «Где» или альтернативный вариант? - PullRequest
15 голосов
/ 09 октября 2011

Как мне заставить это работать, оно работает без предложения 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

Ответы [ 2 ]

23 голосов
/ 09 октября 2011

Вы не можете использовать псевдоним в предложении WHERE. Повторите выражение (грязное) или поместите 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
9 голосов
/ 09 октября 2011

Нельзя использовать псевдоним (из предложения 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...