Tôi sẽ tính toán trước các giá trị hàng đầu và lưu trữ chúng trong một bảng tạm thời trước khi thực hiện CẬP NHẬT:
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);
Tuy nhiên, tôi không chắc cách NumberOfResults
và NumberOfPlaces
được định nghia. Bạn đang chọn một vị trí hàng đầu nhưng không bao giờ tính toán bất kỳ con số nào. Có thể bạn có thể thêm cái này vào phần CHỌN:
...,
(SELECT COUNT(*)
FROM Results R2
WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID) AS NumberOfResults
INTO ...