sql server 2008中具有自定义编号的起始行号

sql server 2008中具有自定义编号的起始行号,sql,sql-server,Sql,Sql Server,我想根据行号设置一个名为“vorder”的列,并跳过一些唯一的id 表“tblUser”类似于: 现在,我想用skip更新生日,根据Id降序,其中Id不是1 我想要这样的结果 ╔════════╦═══════════╦══════════╦══════════╦════════╗ ║ Id ║ Firstname ║ Lastname ║ Birthday ║ Salary ║ ╠════════╬═══════════╬══════════╬══════════╬════════╣

我想根据行号设置一个名为“vorder”的列,并跳过一些唯一的id

表“tblUser”类似于:

现在,我想用skip更新生日,根据Id降序,其中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 

有什么帮助吗?

可能是这样的:

;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