2011-08-19 14 views
7

मैं इस तरह कुछ करना चाहता हूँ:यदि मैं एक चयन खंड में उपनाम का उपयोग करता हूं, तो मैं उस उपनाम को वापस कैसे देखूं?

SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, Foo - col_c as Bar 
FROM my_table 
WHERE...; 

हालांकि, मैं कह रहा Foo अज्ञात है कोई त्रुटि मिलती है। चूंकि फू को अन्य कॉलमों के समूह पर कुछ गणनाओं से लिया गया है, इसलिए मैं Bar के लिए सूत्र को फिर से दोहराना नहीं चाहता हूं। कोई काम-आसपास?

+0

आप किस डीबी का उपयोग कर रहे हैं? – beny23

+0

मैं वर्टिका का उपयोग कर रहा हूं, लेकिन मुझे भी MySQL के साथ एक ही त्रुटि मिलती है। –

उत्तर

8
SELECT Foo, Foo - col_c as Bar 
from (
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c 
FROM my_table 
WHERE... 

) t; 
+2

+1: हॉलैनिल के जवाब के समान, लेकिन गलती के बिना :) – MatBailie

3

मैं आमतौर पर एक उप क्वेरी के साथ इस संभाल होगा:

SELECT Foo, Foo - col_c as Bar 
FROM (
    SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c 
    FROM my_table 
    WHERE ... 
) 
WHERE ... 

आप एसक्यूएल सर्वर मिल गया है, तो एक CTE ज्यादा एक ही बात को प्राप्त होता है।

+0

उपरोक्त के साथ एक ही समस्या उत्पन्न होती है। आप शायद "क्वेरी - col_c बार के रूप में" बाहरी क्वेरी में स्थानांतरित करने के लिए क्या मतलब था। मुझे यकीन नहीं है कि इस संदर्भ में एक सबक्वायरी इष्टतम होगा या नहीं। –

+0

सही। @codie: स्पष्टीकरण के लिए यह समान प्रश्न देखें: http://stackoverflow.com/questions/6545664/using-case-expression-column-in-where-clause/6545685#6545685 –

+0

@ कोडी: आप या तो सबक्वायरी समाधान का उपयोग करते हैं या आप 'WHERE' खंड में कोड दोहराते हैं। –

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