2009-08-20 13 views
6

में स्केलर मैक्स एसक्यूएल सर्वर (जैसे Math.Max) में स्केलर MAX को कार्यान्वित करने के लिए कैसे करें।एसक्यूएल सर्वर

  • एक अदिश समारोह बनाने के साथ

    मैं दूसरे धागे समाधान में देखा है ((सार में मैं मैक्स की तरह कुछ (अभिव्यक्ति, 0) को लागू करने, 0. द्वारा प्रतिस्थापित ऋणात्मक मानों बनाना चाहते) तरीका बताया गया है कि प्रदर्शन के साथ?)

  • मामला है जब अभिव्यक्ति> 0 तब अभिव्यक्ति और के 0) (फिर 'अभिव्यक्ति' दो बार मूल्यांकन किया जाता है?) मैक्स (कुल) के
  • जटिल का उपयोग करता है।

सबसे अच्छा क्या है? एसक्यूएल सर्वर में ऐसा कुछ क्यों नहीं है? कोई जटिलता जो मैं नहीं देखता हूं?

+0

http://stackoverflow.com/questions/989415/t-sql-equivalent-of-excel-max-function-to-return-larger-of-two-numbers –

+0

http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-take-two-values-like-math-max-in-net – JoeCool

+0

इस सुविधा को उत्पाद में प्राप्त करने के लिए कृपया वोट दें माइक्रोसॉफ्ट कनेक्ट आइटम: http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar-max – usr

उत्तर

1

आप इनपुट, अभिव्यक्ति और एक न्यूनतम मान के रूप में दो पैरामीटर लेने के लिए एसक्यूएल सर्वर में MAX नामक उपयोगकर्ता द्वारा परिभाषित स्केलर फ़ंक्शन बनाना चाहते हैं, और यदि यह न्यूनतम मान से अधिक है तो अभिव्यक्ति वापस कर दें, अन्यथा न्यूनतम मान वापस करें?

मैं स्केलर फ़ंक्शंस के प्रदर्शन के बारे में चिंता नहीं करता, सर्वर को ऐसा करने दें। मैं> न्यूनतम मूल्य के परीक्षण के लिए CASE के बजाय IF का उपयोग भी करूंगा।

एसक्यूएल सर्वर में आपके लिए कोई फ़ंक्शन नहीं बनाया गया है क्योंकि उन्हें नहीं लगता था कि यह व्यापक रूप से पर्याप्त रूप से उपयोग किया जाएगा, मुझे लगता है।

+0

स्केलर फ़ंक्शंस के प्रदर्शन के बारे में: वे वास्तव में दर्दनाक हो सकते हैं , लेकिन मुझे लगता है कि यह मानना ​​सुरक्षित है कि जब तक कोई टेबल/व्यू तर्क शामिल नहीं है, तब तक उन्हें काफी तेज़ होना चाहिए (जैसे सिस्टम फ़ंक्शंस में बनाया गया है?) - रीन 0 सेकंड पहले – Rein

5

अन्य सभी प्रमुख प्रणालियों में इस फ़ंक्शन को GREATEST कहा जाता है।

SQL Serverगंभीरता से इसकी कमी है।

आप मामले बयान का एक समूह बनाने के लिए, या कुछ इस तरह उपयोग कर सकते हैं:

SELECT (
     SELECT MAX(expression) 
     FROM (
       SELECT expression 
       UNION ALL 
       SELECT 0 
       ) q 
     ) AS greatest 
FROM table_that_has_a_field_named_expression 

बाद एक CASE बयानों की तुलना में एक trifle कम performant है।

+0

यह बहुत अच्छा है क्योंकि अगर पहली अभिव्यक्ति है एक जटिल गणना और आप इसे निरंतर तुलना कर रहे हैं, आप चालू हैं ly को जटिल गणना एक बार लिखनी है! – John

+1

इस सुविधा को उत्पाद में प्राप्त करने के लिए कृपया Microsoft कनेक्ट आइटम पर वोट दें: http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar- अधिकतम – usr

+0

वोट दिया गया!यह निश्चित रूप से एक उपयोगी जोड़ होगा! – eidylon

0

क्वेरी ऑप्टिमाइज़र को अभिव्यक्ति को कई बार गणना करने से रोकना चाहिए।

पठनीयता/रखरखाव के लिए, सीएएसई कथन से पहले अभिव्यक्ति की गणना करने के लिए सीटीई का उपयोग करने पर विचार करें।

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