2011-11-03 8 views
6

मैं निम्नलिखित प्रश्न हैं:विभिन्न कॉलम नामों के लिए अधिकतम मूल्य वापस करने के लिए मैं इस टी-एसक्यूएल क्वेरी को कैसे संशोधित करूं?

SELECT 
     [Rate], 
     [RateMon], 
     [RateTue], 
     [RateWed], 
     [RateThu], 
     [RateFri], 
     [RateSat], 
     [RateSun] 
    FROM 
     [Room] 
    WHERE 
     [email protected] 

इसके बजाय सभी कॉलम लौटने की, मैं सिर्फ Rate वापस जाने के लिए चाहते हैं और RateMon, RateTue, RateWed, RateThu, RateFri, RateSat, और RateSun के बीच अधिकतम मूल्य है, लेकिन मैं मुझे कठिन समय है क्योंकि कॉलम नाम अलग हैं।

एक उदाहरण परिणाम वापसी अब है:

100, 400, 400, 400, 400, 600, 600, 600

जहां 100 की दर और अन्य मूल्यों है सोम के अनुरूप - सन, लेकिन मैं इस मामले में सिर्फ 100 और 600 लौटना चाहता हूं।

+0

उदाहरण डेटा और परिणाम पोस्ट करें। यह स्पष्ट नहीं है कि आप क्या खोज रहे हैं। – Oded

+0

[एकाधिक कॉलम के एसक्यूएल MAX का संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/71022/sql-max-of-multiple-columns) –

+0

संभव डुप्लिकेट [SQL सर्वर 2008 में फ़ंक्शन में MySQL में GREATEST के समान ?] (http://stackoverflow.com/questions/4725823/function-in-sql-server-2008-similar-to-greatest-in-mysql) –

उत्तर

8
SELECT [Rate], 
     (SELECT MAX(T.[Rate]) 
     FROM (VALUES([RateMon]), 
        ([RateTue]), 
        ([RateWed]), 
        ([RateThu]), 
        ([RateFri]), 
        ([RateSat]), 
        ([RateSun])) AS T([Rate]) 
     ) AS MaxRate 
FROM [Room] 
WHERE [email protected] 
+0

सर्वश्रेष्ठ उत्तर क्योंकि यह सबसे अधिक सफल है। – Xaisoft

+0

+1 वाह, पता नहीं था कि आप बाहर 'मूल्य' का उपयोग कर सकते हैं! – Andomar

+0

यकीन नहीं है कि मुझे इसे स्वीकार करना चाहिए हालांकि आप स्वीडन से हैं और मैं नॉर्वेजियन हिस्सा हूं :) बस मजाक कर रहा हूं। – Xaisoft

1

तुम कुछ का उपयोग कर सकते वर्बोज़ चाहते:

SELECT Rate, 
    CASE 
    WHEN RateMon>=RateTue AND RateMon>=RateWed AND RateMon>=RateThu AND 
     RateMon>=RateFri AND RAteMon>=RateSat AND RateMon>=RateSun THEN RateMon 
    WHEN RateTue>=RateMon AND RateTue>=RateWed AND RateTue>=RateThu AND 
     RateTue>=RateFri AND RateTue>=RateSat AND RateTue>=RateSun THEN RateTue 
    WHEN RateWed>=RateMon AND RateWed>=RateTue AND RateWed>=RateThu AND 
     RateWed>=RateFri AND RateWed>=RateSat AND RateWed>=RateSun THEN RateWed 
    WHEN RateThu>=RateMon AND RateThu>=RateTue AND RateThu>=RateWed AND 
     RateThu>=RateFri AND RateThu>=RateSat AND RateThu>=RateSun THEN RateThu 
    WHEN RateFri>=RateMon AND RateFri>=RateTue AND RateFri>=RateWed AND 
     RateFri>=RateThu AND RateFri>=RateSat AND RateFri>=RateSun THEN RateFri 
    WHEN RateSat>=RateMon AND RateSat>=RateTue AND RateSat>=RateWed AND 
     RateSat>=RateThu AND RateSat>=RateFri AND RateSat>=RateSun THEN RateSat 
    WHEN RateSun>=RateMon AND RateSun>=RateTue AND RateSun>=RateWed AND 
     RateSun>=RateThu AND RateSun>=RateFri AND RateSun>=RateSat THEN RateSun 
    END AS MaxRate 
FROM  
    [Room]  
WHERE  
    [email protected] 

टाइपिंग का एक बहुत है, लेकिन है कि एक संभावित जवाब है। , के बाद से एक सरल में शामिल होने और कुल पर्याप्त होगा

SELECT Rate, MAX(Rates.Rate) AS MaxRate 
    FROM  
    [Room], 
     (SELECT RateMon AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateTue AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateWed AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateThu AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateFri AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateSat AS Rate FROM [Room] WHERE [email protected] UNION 
     SELECT RateSun AS Rate FROM [Room] WHERE [email protected]) 
    AS Rates 
    WHERE  
    [email protected] 
बेशक

, सही समाधान अपने डेटाबेस को सामान्य और इस विवादास्पद बनाने के लिए होगा: तुम भी निम्नलिखित है, जो थोड़ा कम टाइपिंग है कर सकते हैं।

+0

वाह जो विशाल है। धन्यवाद, मैं इसे एक शॉट दूंगा। आपको लगता है कि स्तंभों का एक सेट देने की तरह कुछ और आसान होगा, इस मामले के तर्क के बजाय अधिकतम मूल्य वापस कर दें। – Xaisoft

+0

MySQL (GREATEST) पर है लेकिन SQL सर्वर पर नहीं है। –

+0

हां, मैंने इसे दूसरी पोस्ट पर पढ़ा। मुझे आश्चर्य है कि यह SQL सर्वर की भावी रिलीज में होगा। – Xaisoft

1

आप एक union सबक्वेरी के साथ दिन unpivot सकता है:

select Rate 
,  max(DayRate) 
from (
     select ID, Rate, RateMon as DayRate from Room 
     union all 
     select ID, Rate, RateTue from Room 
     union all 
     select ID, Rate, RateWed from Room 
     union all 
     .... 
     ) as SubQuery 
where ID = @ID 
group by 
     Rate 
संबंधित मुद्दे

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