我想通过查看积分奖励字段,奖励金牌和银牌(即在适用的情况下值为1,否则为0)至前2名。
我已经创建了第一个表。我用我想要的额外字段修改了它,即rank,gold,silver fields。它现在有空值。
我尝试了一些查询:
update dbo.original
set rnk = dense_rank() over (partition by WeekNumber order by pointsrewarded desc)
set gold =
case when rnk = '1' then 1 else 0 end
set silver =
case when rnk = '2' then 1 else 0 end
我已经通过添加rnk,gold和silver字段修改了表格设计。我希望查询生成的值可以放在那些字段中。
请帮我查询或提供一些有关如何继续的建议。请
非常感谢。
答案 0 :(得分:1)
这似乎是您之前问题的后续行动。
在SQL Server中,您可以使用可更新的CTE:
with toupdate as (
select o.*,
dense_rank() over (partition by WeekNumber order by pointsrewarded desc) as new_rnk
from dbo.original
)
update toupdate
set rnk = new_rank,
gold = (case when rnk = 1 then 1 else 0 end),
silver = (case when rnk = 2 then 1 else 0 end);
注意:仅对字符串和日期常量使用单引号。不要对数字常量使用单引号。