我想设置一个名为'vorder'的列,并根据行号跳过一些唯一的id。
表“ tblUser ”喜欢:
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║
╠════════╬═══════════╬══════════╬══════════╬════════╣
║ 1 ║ kinjal ║ a ║ 1 ║ 122 ║
║ 2 ║ a ║ s ║ 4 ║ 122 ║
║ 5 ║ b ║ ds ║ 12 ║ 234 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝
现在,我想用跳过来更新生日,其中Id不是1,按照降序排列。
我希望结果像
╔════════╦═══════════╦══════════╦══════════╦════════╗
║ 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 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝
任何帮助?
答案 0 :(得分:1)
也许是这样的:
;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