2011-11-15 16 views
6

मैं इस तरह एक प्रश्न है:एसक्यूएल सर्वर उपयोग अभिकलन स्तंभ

select 
(price1 + price2 + price3) as total_price 
from prices 

मैं कैसे गणना स्तंभ TOTAL_PRICE उपयोग कर सकते हैं इस तरह अन्य कुल गणना करने के लिए?

select 
(price1 + price2 + price3) as total_price, 
(price4 + total_price) as total_price2 
from prices  

क्या यह संभव है?

+0

'क्या यह संभव है?', क्या आपने इसे स्वयं करने की कोशिश की है? –

+1

संभोग मैंने कोशिश की। मुझे एक "अवैध कॉलम कुल_प्रिस" संदेश मिलता है। क्या मैं संभवतः पूरा करने की कोशिश कर रहा हूं? – Khronos

+4

एक ही प्रश्न के अंदर नहीं - क्वेरी प्रोसेसर इनपुट कॉलम के रूप में आउटपुट कॉलम का उपयोग नहीं कर सकता है। आपको या तो हर बार फॉर्मूला लिखना होगा या आंतरिक क्वेरी बनाना होगा, जो पहले स्तर के गणना वाले कॉलम की गणना करता है और उसके बाद उस क्वेरी से चयन करता है, जो अगले स्तर के सूत्रों की गणना करता है। – Arvo

उत्तर

11

कोई भी स्तर पर परिभाषित कॉलम उपनाम का संदर्भ देना संभव नहीं है। अभिव्यक्तियां जो समान लॉजिकल क्वेरी प्रोसेसिंग चरण में दिखाई देती हैं evaluated as if at the same point in time हैं।

As Joe Celko says

ये चीज़ें हो "सभी को एक बार" एसक्यूएल में, नहीं "बाएं से दाएं" के रूप में वे हैं एक अनुक्रमिक फ़ाइल/प्रक्रियात्मक भाषा मॉडल में

आप इसे परिभाषित कर सकते हैं एक सीटीई में और फिर इसे सीटीई के बाहर फिर से उपयोग करें।

उदाहरण

WITH T 
    AS (SELECT (price1 + price2 + price3) AS total_price, 
       price4 
     FROM prices) 
SELECT total_price, 
     (price4 + total_price) AS total_price2 
FROM T 
1
select T.total_price, 
     P.price4 + T.total_price as total_price2 
from prices as P 
    cross apply (select P.price1 + P.price2 + P.price3) as T(total_price) 
3

मैं भी मेज पर एक computed column विचार करूँगा अगर यह अक्सर इस्तेमाल किया जाएगा

ALTER TABLE prices ADD 
    total_price AS (price1 + price2 + price3) 

तो आपकी क्वेरी

select 
    total_price, 
    (price4 + total_price) as total_price2 
from prices 

है इस तरह , आप डी लागू कर सकते हैं आरवाई सिद्धांत ...

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