テーブルPerformance
のランクを更新したかったのですが、この解決策を見つけましたが、このSQLコードが機能する理由がわかりません。
WITH cte AS (
SELECT AllTimeRank, r = RANK () OVER (PARTITION BY Distance ORDER BY TimeInSeconds)
FROM dbo.Performance
)
UPDATE cte
SET AllTimeRank = r FROM cte;
ステートメントはUPDATE CTE
ですが、実際にはテーブルを実際に更新します(dbo.Performance
)。
誰かがこれを説明できますかmagic?
次のステートメントもまったく同じように動作します。
WITH cte AS (
SELECT Id, r = RANK () OVER (PARTITION BY Distance ORDER BY TimeInSeconds)
FROM dbo.Performance
)
UPDATE dbo.Performance
SET AllTimeRank = r
FROM cte INNER JOIN dbo.Performance p ON p.Id = cte.Id;