Как добавить функцию PERSIST к ранжированию в SQL Server?
Как мне добавить функцию PERSIST в рейтинг?
Я планирую создать представление из этого кода и буду часто выполнять подзапросы к нему. Поэтому, конечно, я не хочу, чтобы рейтинг менялся в зависимости от того, какой подзапрос я выполняю. Я хочу, чтобы это был обычный столбец без формул.
SELECT a.player_id, a.full_name, a.first_name, a.last_name, d.[rank],
d.column3, a.tournament, c.column5, a.[year], a.[round],
a.score, RANK() OVER (PARTITION BY a.[round] + b.tournament_id + a.
[year] ORDER BY a.score) AS round_leaderboard
FROM df1 AS a JOIN
df2 AS b ON a.tournament = b.tournament JOIN
df3 AS c ON c.[Event] = a.tournament
LEFT JOIN df4 as d
On a.player_id=d.player_id and a.[year]=d.[year]
1 ответ
Вы можете использовать материализованное представление:
create view myview with schemabinding as
SELECT a.player_id, a.full_name, a.first_name, a.last_name, d.[rank],
d.column3, a.tournament, c.column5, a.[year], a.[round],
a.score,
RANK() OVER (PARTITION BY a.[round] + b.tournament_id + a.[year] ORDER BY a.score) AS round_leaderboard
FROM df1 a JOIN
df2 b
ON a.tournament = b.tournament JOIN
df3 c
ON c.[Event] = a.tournament LEFT JOIN
df4 d
On a.player_id = d.player_id and a.[year] = d.[year];
create index idx_myview_playerid on myview(playerid);
Материализованные представления объясняются в документации.