2011-10-09 7 views
14

मैं इसे काम करने के लिए कैसे प्राप्त करूं, यह कहां क्लॉज के बिना काम करता है, अन्यथा कहां क्लॉज के साथ, मुझे स्पष्ट त्रुटि मिलती है, लेकिन मूल रूप से यह करने की ज़रूरत है, किसी को भी यह कैसे पता चलेगा?क्लॉज या वैकल्पिक विकल्प में एलियस का उपयोग करना?

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

उम्मीद है कि इस क्वेरी के प्रयोजन तो आप अपनी तालिका संरचना को ठीक करने और यह पहली बार सामान्य रूप में डाल सकता है। –

उत्तर

22

आप WHERE खंड में उपनाम का उपयोग नहीं कर सकते हैं। या तो अभिव्यक्ति दोहराने (गंदा) या फिर एक सबक्वेरी में अपने चयन रखा और फिर बाहरी क्वेरी में कहां खंड डाल: 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

आप एक उपनाम (SELECT खंड से) उपयोग नहीं कर सकते logical processing order (अनुभाग: 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; 

समाधान: मार्क बेयर्स द्वारा प्रस्तुत समाधान देखें।

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

संबंधित मुद्दे