2011-10-09 17 views
14

どのようにこれを動作させるには、Where節なしで動作します。それ以外の場合は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 
+5

うまくいけば、このクエリの目的は、あなたがあなたのテーブル構造を修正し、第1正規形にそれを置くことができます。 –

答えて

22

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 
+0

感謝のように働いた、ありがとう。 –

7

あなたはWHERE句で(SELECT句から)エイリアスを使用することはできませんlogical processing order(セクション:Logical Processing Order of the SELECT statementは):

FROM  
ON 
JOIN 
WHERE <-- 
GROUP BY 
WITH CUBE or WITH ROLLUP 
HAVING 
SELECT <-- 
DISTINCT 
ORDER BY <-- 
TOP 

しかし、あなたはORDER BYでエイリアスを使用することができます:WHERE、その後SELECTある

SELECT h.SalesOrderID, YEAR(h.OrderDate) OrderYear 
FROM Sales.SalesOrderHeader h 
ORDER BY OrderYear; 

ソリューション:Mark Byers氏のソリューションをご覧ください。

Tibor Karaszi: Why can't we have column alias in ORDER BY?

関連する問題