【问题标题】:How to sort the row of record and update dynamically in SQL?如何在 SQL 中对记录行进行排序和动态更新?
【发布时间】:2018-12-13 19:29:30
【问题描述】:

关于 SQL 查询语法的说明:我们有一个 Employee 表,它有两列 Emp IdEmpName,其值如下所示:

100, a
200, b
300, c

我必须将EmpName 更新为 100 为“Joe”,200 为“John”,300 为“Sam”。然后需要重复这 3 个相同的名称以用于表格的其余部分。

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

【问题讨论】:

  • 逻辑不清楚。如果下一个 Emp ID 是 500,您希望 EmpName 是什么? “Test4”还是“Test5”?
  • Update employee set EmpName = "Test" & EmpID/100

标签: sql sql-server tsql


【解决方案1】:
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
  • 你好@Joe,这很有帮助.. 但是更新 EmpName 必须是自定义的.. 例如.. 第 1 行可能是 Joe,第 2 行可能是 John,第 3 行可能是 Mike。 . - 如何更新 EmpName .. 在传递这 3 个值时 .. 按顺序进行
  • @goofyui 我不明白你的预期结果。
  • @JoeStefanelli 这不是真的似曾相识,反正 OP 问题现在似乎还不清楚。
  • @JoeStefanelli,现在.. 您正在强制将 empname 设置为 Test1、Test2、Test3 .. 我给出的只是一组数据样本。然而实际上,我们需要按照id列的asc顺序更新3个硬编码名称
【解决方案2】:

您好,请添加 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] 的有序列。 并运行更新语句以获得所需的结果。

【讨论】:

  • 欢迎来到 SO!作为新人并不能防止反对票。相信我,这并不总是那么容易,但不要把它们当成个人。事实上,它们可以成为新用户学习和改进的宝贵方式。 (而且我不会对你投反对票)。 stackoverflow.com/help/privileges/vote-down
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2016-07-09
  • 2016-03-02
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多