更新行的 SQL 查询

标签 sql sql-server

表格中的数据格式如下

ID  DocNumber   RevOrder
1   DOC-001     NULL
2   DOC-001     NULL
3   DOC-001     NULL
4   DOC-002     NULL
5   D0C-002     NULL
6   D0C-003     NULL

我需要将 RevOrder 列更新为以下格式

ID  DocNumber   RevOrder
1   DOC-001     3
2   DOC-001     2
3   DOC-001     1
4   DOC-002     2
5   D0C-002     1
6   D0C-003     1

逻辑是:DocNumber可以重复,最大ID的DocNumber得到RevOrder = 1,接下来得到 RevOrder = 2 等...我怎样才能实现上述情况?

最佳答案

根据分区上的 ROW_NUMBER() 使用此 UPDATE 语句:

;WITH UpdateData AS
(
    SELECT 
       ID, DocNumber,
       ROW_NUMBER() OVER(PARTITION BY DocNumber ORDER BY ID DESC) AS 'RowNum' 
    FROM dbo.YourTable
)
UPDATE dbo.YourTable
SET RevOrder = RowNum
FROM dbo.YourTable t
INNER JOIN UpdateData ud ON t.ID = ud.ID

关于更新行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983869/

相关文章:

MySql 非平凡选择

sql - 计算两个日期时间之间早上 7 点或晚上 7 点出现的次数

sql - Service Broker 对话未关闭(保持在 CONVERSING 状态)

SQL Server,连接到具有相同列的多个表

SQL:如何在创建表时指定日期格式并填充它

mysql - SQL 查询配对数据库中的相同事务并计算它们的平均执行时间

sql - 创建引用尚未创建的 View 的 View

sql-server - 如何检测READ_COMMITTED_SNAPSHOT是否启用?

SQL Server 交叉应用不起作用?

sql - RDBMS 中基于表的关系和基于列的关系有什么区别?