Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर में मल्टीपिलेशन एग्रीगेट

मैं इस प्रकार के ऑपरेशन के लिए स्केलर फ़ंक्शन का उपयोग नहीं करता। आप खराब प्रदर्शन के साथ समाप्त होते हैं क्योंकि क्वेरी अनुकूलक को इसे row-by-row चलाने की आवश्यकता होती है बिना किसी इष्टतमीकरण के। और जानकारी:SQL Server Functions: The Basics

दूसरा फ्लोट/दशमलव और LOG/EXP . के साथ आपको सन्निकटन त्रुटियाँ मिलेंगी।

कार्य करने के लिए डेटा पास करने के लिए तीसरा आप XML . का उपयोग कर सकते हैं जैसे:

CREATE FUNCTION dbo.udf_Mul(@value xml)
RETURNS FLOAT
AS
  BEGIN
      DECLARE @mul_value FLOAT;
      DECLARE @values AS TABLE ([value] float);

       INSERT INTO @values([value])
       SELECT [value] = t.c.value('(value)[1]', 'float')
      FROM @value.nodes('//row') AS t(c);


      SELECT @mul_value=CASE
               WHEN MinVal = 0 THEN 0
               WHEN Neg % 2 = 1 THEN -1 * Exp(ABSMult)
               ELSE Exp(ABSMult)
             END 
      FROM   (SELECT
             Sum(Log(Abs(NULLIF(Value, 0)))) AS ABSMult,
             Sum(Sign(CASE
                        WHEN Value < 0 THEN 1
                        ELSE 0
                      END))                  AS Neg,
             Min(Abs(Value))                 AS MinVal
              FROM   @values) foo

      RETURN @mul_value
  END 

और इसे कॉल करना:

SELECT *
FROM Floats a
CROSS APPLY (SELECT dbo.udf_mul((SELECT [value]
                                 FROM Floats b
                                 WHERE a.id >= b.id
                                 FOR XML PATH, ROOT('root')))
             AS r) as cs(r);

SqlFiddleDemo

आउटपुट:

╔═════╦════════╦════════════════════╗
║ id  ║ value  ║         r          ║
╠═════╬════════╬════════════════════╣
║  1  ║     1  ║ 1                  ║
║  2  ║     3  ║ 3.0000000000000004 ║
║  3  ║     6  ║ 17.999999999999996 ║
║  4  ║     2  ║ 36                 ║
╚═════╩════════╩════════════════════╝



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2005 तालिका के लिए कितने कॉलम बहुत अधिक हैं?

  2. सी # में एक SQL सर्वर संग्रहीत प्रक्रिया की एसिंक्रोनस कॉल

  3. मैक पर SQL सर्वर 2017 और 2019 को एक साथ कैसे चलाएं

  4. SQL तालिका में प्राथमिक कुंजी कॉलम जोड़ें

  5. कॉलम द्वारा समूह और एकाधिक पंक्तियों को एक पंक्ति एकाधिक कॉलम में समूहित करें