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

गड़बड़ SQL डेटा - अपडेट स्टेटमेंट के भीतर चुनें

मैं शीर्ष मूल्यों की पूर्व-गणना करूँगा और अद्यतन करने से पहले उन्हें एक अस्थायी तालिका में संग्रहीत करूँगा:

SELECT
    R1.Date,
    R1.ContestID,
    (SELECT TOP 1 R2.Position
     FROM Results R2
     WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID
     ORDER BY R2.Position DESC) AS TopPosition
INTO #temp
FROM
    (SELECT DISTINCT Date, ContestID FROM Results) R1;

UPDATE Results R
SET    R.Points = 100 + ((100/((SELECT TopPosition FROM #temp T
                                WHERE T.Date = R.Date AND
                                      T.ContestID = R.ContestID)-4) *
                            ((SELECT TopPosition FROM #temp T
                              WHERE T.Date = R.Date AND
                                    T.ContestID = R.ContestID)-R.Position)))
WHERE  R.ContestID > 11
AND    R.Position > 4
AND    R.Position < (SELECT TopPosition FROM #temp T
                     WHERE T.Date = R.Date AND T.ContestID = R.ContestID);

हालांकि, मुझे यकीन नहीं है कि कैसे NumberOfResults और NumberOfPlaces परिभाषित किया गया हैं। आप एक शीर्ष स्थान का चयन कर रहे हैं लेकिन कभी किसी संख्या की गणना नहीं कर रहे हैं। शायद आप इसे SELECT में जोड़ सकते हैं:

...,
(SELECT COUNT(*)
 FROM Results R2
 WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID) AS NumberOfResults
INTO ...


  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 सर्वर गतिरोध क्या है?

  2. SQL सर्वर में क्लॉज द्वारा ओवर क्लॉज और पार्टिशन के साथ रनिंग टोटल की गणना करना

  3. यह जांचने का सबसे तेज़ तरीका है कि कोई वर्ण अंक है या नहीं?

  4. SQL सर्वर ट्रिगर डिलीट या कैस्केड डिलीट

  5. नॉट लाइक इन के साथ एसक्यूएल क्वेरी