2011-10-09 15 views
14

Bunu nasıl işe alırım, Where Clause olmadan çalışır, aksi halde Where cümlesiyle, bariz bir hatayı alırım, ama temel olarak yapılması gerekenler, buna nasıl yaklaşılacağını bilen var mı?Madde veya Alternatif Bir Seçenek İçinde Takma Ad Kullanımı?

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

Umarım bu sorgunun amacı böylece tablo yapısını düzeltmek ve birinci normal forma koyabilirsiniz olduğunu. –

cevap

22

Sen WHERE cümleciği takma kullanamazsınız. Ya (dağınık) ifadesini tekrarlamak ya da başka bir alt sorguda SELECT koymak ve daha sonra dış sorguda WHERE yan tümcesi koymak çünkü: WHERE fıkrada

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

Bir çekicilik gibi çalıştı, teşekkürler. –

7

Sen (SELECT maddesi itibaren) bir takma ad kullanamazsınız logical processing order (bölüm: Logical Processing Order of the SELECT statement): Eğer ORDER BY bir takma ad kullanabilirsiniz

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

Ama:

SELECT h.SalesOrderID, YEAR(h.OrderDate) OrderYear 
FROM Sales.SalesOrderHeader h 
ORDER BY OrderYear; 
ve sonra SELECT olduğunu

Çözümler: Mark Byers tarafından sunulan çözümlere bakın.

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

İlgili konular