更新一组记录t-sql的第一条记录

Arn*_*501 3 t-sql sql-server

我有一张这样的桌子

CREATE TABLE [dbo].[tblUserLink](
    [IDUserLink] [int] IDENTITY(1,1) NOT NULL,
    [IDUser] [int] NOT NULL,
    [IDRegie] [varchar](50) NOT NULL,
    [DefaultAgency] [bit] NULL
)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个查询/脚本来更新字段DefaultAgency.我想将它设置为1,以获得具有相同IDUser的每组记录的第一条记录.

例如:

IDUserLink IDUser IDRegie DefaultAgency (Goal)
1          1      1       null           DefaultAgency to be set to 1
2          1      2       null
3          1      3       null
4          2      2       null           DefaultAgency to be set to 1
5          2      1       null     
6          3      1       null           DefaultAgency to be set to 1
 ...etc 
Run Code Online (Sandbox Code Playgroud)

我可以使用简单的SQL查询来实现这一点,还是应该编写脚本?

pod*_*ska 7

update tblUserLink
set DefaultAgency = 1
where IDUserLink in
(select min(IDUserLink) from tblUserLink group by IDUser)
Run Code Online (Sandbox Code Playgroud)


Ben*_*hul 5

如果您使用的是SQL Server 2005+,则可以使用公用表表达式:

with cte as (
   select *,
      row_number() over (partition by IDUser order by IDUserLink) as [rn]
   from tblUserLink
)
update c
set DefaultAgency = 1
from cte as c
where c.rn = 1
Run Code Online (Sandbox Code Playgroud)