2013-05-01 4 views
5
 

    create table t(a int, b int); 
    insert into t values (1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3); 

    select * from t; 

    a | b 
    ---------- 
    1 | 1 
    1 | 2 
    1 | 3 
    2 | 1 
    2 | 2 
    2 | 3 
    3 | 1 
    3 | 2 
    3 | 3 

    select 
     max(case when a = 1 then b else 0 end) as q, 
     max(case when b = 1 then a else 0 end) as c, 
     (
     
         
 
  
          max(case when a = 1 then b else 0 end)
         
  
     + 
     
         
 
  
          max(case when b = 1 then a else 0 end)
         
  
    ) as x 
    from t 

यह कुछ इस तरह करने के लिए संभव है?कैसे कोड दोहराव के बिना मूल्य एक्स पाने के लिए

 

    select 
     max(case when a = 1 then b else 0 end) as q, 
     max(case when b = 1 then a else 0 end) as c, 
     (q + c) as x 
    from t 

+1

1 का उपयोग कर सकते हैं) इसका जवाब आपके एसक्यूएल विक्रेता के आधार पर भिन्न हो सकती है। माई एसक्यूएल? आकाशवाणी? एस क्यू एल सर्वर? 2) मैं एक अस्थायी तालिका में दो कॉलम के साथ साथ नए स्तंभ का चयन करने के लिए इसे से तो एक का चयन पहले दो स्तंभों पकड़े, शर्त, यह – Patashu

उत्तर

5

आप ALIAS कि SELECT खंड के एक ही स्तर पर दिया गया था का उपयोग नहीं कर सकते हैं।

आपके पास दो विकल्प: अभिव्यक्ति का उपयोग करके

  • सीधे

क्वेरी:

select 
    max(case when a = 1 then b else 0 end) as q, 
    max(case when b = 1 then a else 0 end) as c, 
    (max(case when a = 1 then b else 0 end) + max(case when b = 1 then a else 0 end)) as x 
from t 
  • एक सबक्वेरी में लपेटकर द्वारा

क्वेरी:

SELECT q, 
     c, 
     q + c as x 
FROM 
(
    select 
     max(case when a = 1 then b else 0 end) as q, 
     max(case when b = 1 then a else 0 end) as c 
    from t 
) d 
+0

TNX 100x कर सकता है! सबक्वेरी मैं के लिए क्या देख रहा था। – user2328819

0

दुर्भाग्य से आप ऐसा नहीं कर सकते हैं।

ALIAS एक ही स्तर जहां आपने उन्हें बनाया में इस्तेमाल नहीं किया जा सकता है।

एक अस्थायी तालिका के लिए आवश्यक है, मुझे लगता है।

1

इसके अलावा SQLServer2005 + में आप CTE

;WITH cte AS 
(
    select max(case when a = 1 then b else 0 end) as q, 
     max(case when b = 1 then a else 0 end) as c 
    from t 
) 
    SELECT q, c, q + c as x 
    FROM cte 
संबंधित मुद्दे