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