我有一个示例数据集
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
因此,我需要逐步和按顺序更新按标题分组的新书版本号。
我需要把它作为UPDATE SQL ...我的更新似乎失败,因为我的group by子句不起作用
答案 0 :(得分:0)
您可以使用cte和row_number()
:
;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
答案 1 :(得分:0)
我更喜欢使用common table expression (cte)来做这类事情。
使用row_number()
:
;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
如果您想在运行更新之前预览更改,只需将上面更改为select
而不是update
。请注意,只有cte之后的第一个语句才能使用cte。