Sql server 使用GROUPBY(使用自联接)将SQL语句更新到同一个表

Sql server 使用GROUPBY(使用自联接)将SQL语句更新到同一个表,sql-server,Sql Server,我有一个样本数据集 BookID Book_Name Book_Version_Number New Book Version Number (Proposed) 1 XYZ 1.0000 1.0000 1 XYZ 1.0000 2.0000 2 ABC 1.0000 1.0000 2 ABC 1.0000

我有一个样本数据集

BookID Book_Name Book_Version_Number  New Book Version Number (Proposed)
1       XYZ      1.0000               1.0000
1       XYZ      1.0000               2.0000
2       ABC      1.0000               1.0000
2       ABC      1.0000               2.0000
2       ABC      1.0000               3.0000
因此,我需要以递增的顺序更新按标题分组的新书版本号


我需要将此设置为更新SQL。我的更新似乎失败,因为我的group by子句不起作用

您可以使用cte和
行号()


我更喜欢用电脑做这类事情

使用:


如果要在运行更新之前预览更改,只需将上面的更改更改为
选择
,而不是
更新
。请注意,只有cte之后的第一条语句才能使用cte。

请发布您的查询您尝试了什么感谢您Zohar的快速转身和帮助。。到目前为止似乎还有效。我会再做一点抽查。但是…为什么要使用SELECT NULL…只是想了解一下,因为您没有列可供排序,所以我更喜欢使用
order by(SELECT NULL)
,这样当您阅读sql时,您很快就会知道order by是不相关的。好的,谢谢。我使用ORDER BY BOOK_ID稍微修改了一下,看起来效果不错。
;WITH CTE AS
(
    SELECT BookId, 
           BookName, 
           Book_Version_Number,
           ROW_NUMBER() OVER(PARTITION BY BookId ORDER BY (SELECT NULL)) As rn
    FROM TableName
)

UPDATE CTE
SET Book_Version_Number = rn
;with cte as (
  select *
    , New_Book_Version_Number = row_number() over (
        partition by Book_Name /* Title */ 
        order by BookID
        )
  from Books
)
update cte
set Book_Version_Number = New_Book_Version_Number