如何在SQL中对记录行进行排序并动态更新?

时间:2018-12-13 19:29:30

标签: sql sql-server tsql

SQL查询语法的澄清:我们有一个Employee表,其中有两列Emp IdEmpName,其值如下所示:

100, a
200, b
300, c

我必须将EmpName的“ Joe”更新为100,将“ John”的更新为200,将“ Sam”的更新为<?xml version="1.0" encoding="utf-8"?> <ex:Record xmlns:ex="http://archertech.com/Print/Export"> <ex:Item> <ex:Questionnaire_ID>1007</ex:Questionnaire_ID> <ex:Target> <ex:Item>Company 1</ex:Item> </ex:Target> <ex:Document_to_be_Requested> <ex:Item>A</ex:Item> <ex:Item>C</ex:Item> <ex:Item>D</ex:Item> <ex:Item>F</ex:Item> </ex:Document_to_be_Requested> </ex:Item> <ex:Item> <ex:Questionnaire_ID>1009</ex:Questionnaire_ID> <ex:Target> <ex:Item>Company 2</ex:Item> </ex:Target> <ex:Document_to_be_Requested> <ex:Item>A</ex:Item> <ex:Item>B</ex:Item> <ex:Item>F</ex:Item> <ex:Item>G</ex:Item> </ex:Document_to_be_Requested> </ex:Item> </ex:Record> 。然后,对于表的其余部分,需要重复使用这三个相同的名称。

如何按升序选择EmpId并相应地更新EmpName?

2 个答案:

答案 0 :(得分:3)

WITH cteRowNums AS (
    SELECT EmpId,
           EmpName,
           ROW_NUMBER() OVER(ORDER BY EmpId) AS RowNum
        FROM Employee
)
UPDATE cteRowNums
    SET EmpName = CASE WHEN RowNum % 3 = 1 THEN 'Joe'
                       WHEN RowNum % 3 = 2 THEN 'John'
                       WHEN RowNum % 3 = 0 THEN 'Sam'
                  END;

答案 1 :(得分:0)

您好,请添加row_num列 之后使用ROW_NUMBER()更新 像

 Alter table emp1 add row_num varchar(10)

    with cte as (
 select id,name,row_num,ROW_NUMBER() over (order by [id]) as rn
 from emp1
 )
 update cte set row_num = 'Test'+ convert(varchar,rn)

row_number这将创建一个与[Emp Id]有关的有序列。 并运行update语句以获得所需的结果。