2011-03-03 15 views
14

कहता है कि मेरे पास एक निश्चित तालिका पर एक बड़ा चयन है। कॉलम के लिए एक मान जटिल लॉगक के साथ गणना की जाती है और इसे कॉलम ए कहा जाता है। अब, एक और कॉलम के लिए, मुझे कॉलम ए से मूल्य की आवश्यकता है और इसमें कुछ अन्य स्थिर मूल्य जोड़ें।किसी अन्य कॉलम (SQL सर्वर) के लिए कॉलम का मान उपयोग करें?

नमूना एसक्यूएल:

select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ... 

[Columna] + 10 क्या तलाश में im है। जटिल सामान एक बड़ा मामला है/जब ब्लॉक।

विचार?

उत्तर

16

आपको लगता है कि SELECT खंड में गणना की है एक मूल्य के संदर्भ लेना चाहते हैं, तो आप एक उप चयन में मौजूदा क्वेरी बढ़ने की जरूरत है:

यहाँ एक उदाहरण है

SELECT 
    /* Other columns */, 
    ColumnA, 
    ColumnA + 10 as ColumnB 
FROM 
(select table.id, table.number, complex stuff [ColumnA].. from table ... 
) t 

आप इस तालिका के लिए उपनाम (उपरोक्त में, t, समापन ब्रैकेट के बाद) को प्रस्तुत करना होगा, भले ही आप इसका उपयोग नहीं कर रहे हों।

(इसके तुल्य - यह सोचते हैं आप SQL सर्वर 2005 या बाद में उपयोग कर रहे हैं - आप एक CTE में अपने मौजूदा क्वेरी स्थानांतरित कर सकते हैं):

;WITH PartialResults as (
    select table.id, table.number, complex stuff [ColumnA].. from table ... 
) 
SELECT /* other columns */, ColumnA, ColumnA+10 as ColumnB from PartialResults 

सीटीई क्लीनर देखने के लिए करते हैं, तो आप आंशिक के कई स्तरों मिल गया है गणना की जा रही है, यानी अगर आपको अब एक गणना मिली है जो आपकी क्वेरी में शामिल करने के लिए कॉलमब पर निर्भर करती है।

1

आप इसे के साथ एक सबक्वायरी और कॉलम उपनाम के साथ हल कर सकते हैं।

SELECT MaxId + 10 
FROM (SELECT Max(t.Id) As MaxId 
     FROM SomeTable t) As SomeTableMaxId 
1

आप किए जा सकेंगे:

  1. ग्राहक कोड
  2. एक अदिश-मान समारोह लिखें complex stuff के लिए तर्क संपुटित करने में + 10 करो। इसे एक ही कॉल में अनुकूलित किया जाएगा।
  3. अन्य कॉलम के लिए complex stuff तर्क कॉपी करें। इसे 1 कॉल में अनुकूलित किया जाना चाहिए।
  4. अतिरिक्त गणना लागू करने के लिए उप-चयन का उपयोग करें
+0

+1 मुझे वह दूसरा विचार पसंद है –

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