В отличие от Oracle
, PostgreSQL
и даже MySQL
, SQL Server
не имеет эффективного способа вычисления промежуточных итогов.
Если у вас несколько баллов на UserID
, вы можете использовать это:
SELECT userId,
(
SELECT SUM(score)
FROM scores si
WHERE si.UserID = so.UserID
AND si.rn <= so.rn
)
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY UserID) AS rn
FROM scores
) so
, однако, это будет очень неэффективно для больших таблиц.
Для больших таблиц, вы могли бы выиграть от использования (да поможет мне Бог) курсора.