奖励积分并在原始表格中分配这些积分

时间:2016-09-13 16:37:33

标签: sql sql-server sql-server-2008 sql-server-2012

我在这里有一张桌子:enter image description here

我想通过查看积分奖励字段,奖励金牌和银牌(即在适用的情况下值为1,否则为0)至前2名。

我已经创建了第一个表。我用我想要的额外字段修改了它,即rank,gold,silver fields。它现在有空值。

我希望输出是这样的: enter image description here

我尝试了一些查询:

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字段修改了表格设计。我希望查询生成的值可以放在那些字段中。

请帮我查询或提供一些有关如何继续的建议。请

非常感谢。

1 个答案:

答案 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);

注意:仅对字符串和日期常量使用单引号。不要对数字常量使用单引号。