一尘不染

具有多个条件的更新。SQL 2008

sql

我有桌子…

ProjectID    UserID    RoleID
101          1         10
101          2         10
102          2         10
102          3         10
103          1         10

当前只有一种类型的角色,即角色“ 10”,但我想添加一个新角色,即角色“ 11”,它将作为主角。因此,凡是具有“
10”角色的用户的项目,都应具有领导作用。被选择为潜在客户的用户将基于优先级列表,在本示例中,我们将顺序定为1、2、3。

预期结果…

ProjectID    UserID    RoleID
101          1         11
101          2         10
102          2         11
102          3         10
103          1         11

阅读 133

收藏
2021-05-16

共1个答案

一尘不染

您可以使用来确定哪个用户具有最高优先级row_number()。SQL Server让您以可更新的CTE进行此操作,因此查询如下所示:

with toupdate as (
      select t.*,
             row_number() over (partition by projectid
                                order by (case when userid = 1 then 1
                                               when userid = 2 then 2
                                               when userid = 3 then 3
                                               else 4
                                          end
                                         )
                               ) as PriorityForLead
      from table t
     )
update toupdate
    set RoleId = 11
    where PriorityForLead = 1;
2021-05-16