sql Update语句自连接

时间:2014-06-16 19:55:18

标签: sql

Gid Rid Cid PriorityId

1   7   11  NULL
1   7   12  NULL
1   8   13  NULL
1   9   25  NULL
1   13  18  NULL
1   13  19  NULL
1   14  23  NULL
1   14  24  NULL

我需要将priorityId设置为以下内容。任何人都可以建议一个SQL更新语句。  我想我需要一个由Rid和Gid组成的小组或自我加入

Gid Rid Cid PriorityId

1   7   11  1
1   7   12  2
1   8   13  1
1   9   25  1
1   13  18  1
1   13  19  2
1   14  23  1
1   14  24  2

谢谢

2 个答案:

答案 0 :(得分:1)

对于SQL Server 2012,您可以使用Over语句GidRid作为partitions使用以下内容:

Update  T
Set     PriorityId = D.PriorityId
From    
(   
    Select  Gid, Rid, Cid,
            Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As PriorityId
    From    Table
) D
Join    Table   T   On  T.Gid = D.Gid 
                    And T.Rid = D.Rid 
                    And T.Cid = D.Cid 

下面的内部声明应该在不更新表的情况下显示结果:

Select  Gid, Rid, Cid,
        Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As PriorityId
From    Table

答案 1 :(得分:1)

我会写这样的更新:

with toupdate as (
    Select t.*
           Row_Number() Over (Partition By Gid, Rid Order By Gid, Rid, Cid) As new_PriorityId
    From Table t
   )
update toupdate
    set PriorityId = new_PriorityID;
相关问题