在sql server 2008中使用自定义编号开始行号

时间:2014-07-24 06:11:00

标签: sql sql-server

我想设置一个名为'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 ║
╚════════╩═══════════╩══════════╩══════════╩════════╝

任何帮助?

1 个答案:

答案 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