sql server 2008中具有自定义编号的起始行号
我想根据行号设置一个名为“vorder”的列,并跳过一些唯一的id 表“tblUser”类似于: 现在,我想用skip更新生日,根据Id降序,其中Id不是1 我想要这样的结果sql server 2008中具有自定义编号的起始行号,sql,sql-server,Sql,Sql Server,我想根据行号设置一个名为“vorder”的列,并跳过一些唯一的id 表“tblUser”类似于: 现在,我想用skip更新生日,根据Id降序,其中Id不是1 我想要这样的结果 ╔════════╦═══════════╦══════════╦══════════╦════════╗ ║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║ ╠════════╬═══════════╬══════════╬══════════╬════════╣
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║
╠════════╬═══════════╬══════════╬══════════╬════════╣
║ 1 ║ kinjal ║ a ║ 1 ║ 122 ║
║ 2 ║ a ║ s ║ 3 ║ 122 ║
║ 5 ║ b ║ ds ║ 2 ║ 234 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝
但我有以下疑问
WITH CTE_USER(ID, FIRSTNAME, LASTNAME, BIRTHDAY, SALARY, ROW_NUM)
AS (SELECT *,
ROW_NUMBER()
OVER (
ORDER BY ID DESC) AS row_num
FROM TBLUSER
WHERE ID <> 1)
UPDATE TBLUSER
SET BIRTHDAY = CTE_USER.ROW_NUM
FROM TBLUSER
INNER JOIN CTE_USER
ON TBLUSER.ID = CTE_USER.ID
有什么帮助吗?可能是这样的:
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY tblUser.ID DESC)+1 AS rowNbr,
tblUser.*
FROM
tblUser
WHERE NOT tblUser.Id=1
)
UPDATE CTE
SET Birthday = rowNbr
birth with skip where Id not 1根据Id降序
这让我很困惑,解释得很清楚,这就是为什么我粘贴了带有实际结果和预期结果的表。
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║
╠════════╬═══════════╬══════════╬══════════╬════════╣
║ 1 ║ kinjal ║ a ║ 1 ║ 122 ║
║ 2 ║ a ║ s ║ 3 ║ 122 ║
║ 5 ║ b ║ ds ║ 1 ║ 234 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY tblUser.ID DESC)+1 AS rowNbr,
tblUser.*
FROM
tblUser
WHERE NOT tblUser.Id=1
)
UPDATE CTE
SET Birthday = rowNbr