我想设置一个名为'vorder'的列,根据行号跳过一些唯一的id。
Table "tblUser" like:
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║
╠════════╬═══════════╬══════════╬══════════╬════════╣
║ 1 ║ kinjal ║ a ║ 1 ║ 122 ║
║ 2 ║ a ║ s ║ 4 ║ 122 ║
║ 5 ║ b ║ ds ║ 12 ║ 234 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝
现在,我想根据Id降序更新Id不为1的跳过Birthday。
我想要的结果是
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ 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
结果是:
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ 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