【问题标题】:Add a Unique ID Number To Duplicate Rows SQL添加唯一 ID 号以复制行 SQL
【发布时间】:2020-10-01 17:46:52
【问题描述】:

我有一个名为TestTable 的下表,需要更新MsgNum 列,使其具有按日期列排序但按JobNum 分组的唯一编号。

JobNum | MsgNum | Date 
320    | 0      | 2020-04-10 
320    | 0      | 2020-06-11 
320    | 0      | 2020-06-12 
330    | 0      | 2020-04-10 
330    | 0      | 2020-06-11 
330    | 0      | 2020-06-12

以下是我需要结束的内容。

JobNum | MsgNum | Date 
320    | 1      | 2020-04-10 
320    | 2      | 2020-06-11 
320    | 3      | 2020-06-12 
330    | 1      | 2020-04-10 
330    | 2      | 2020-06-11 
330    | 3      | 2020-06-12 

我有以下似乎可以生成 ID 号,但无法使用 ID 号更新表 MsgNum 列。

SELECT [JobNum], [MsgNum]
    , ROW_NUMBER() OVER (PARTITION BY [JobNum] ORDER BY [Date]) AS id
FROM [dbo].[TestTable]

【问题讨论】:

  • 你能用更新命令分享你目前拥有的东西吗?或者,您是否考虑过使用您的 select 语句重建表,即使用您的 select 语句创建一个新表并用新创建的表替换现有表

标签: sql sql-server duplicates sql-update window-functions


【解决方案1】:

您可以使用row_number() 和可更新的公共表表达式:

with cte as (
    select msgNum, row_number() over(partition by jobNum order by Date) rn
    from mytable
)
update cte set msgNum = rn

【讨论】:

  • 那行得通,只是将 mytable 更改为 TestTable 并运行该语句,它完全按照需要更新了表。谢谢。
  • 为我需要更新的生产表更新下面的语句,它运行良好。 '代码 WITH IDNUM AS (SELECT [Conversation Id], ROW_NUMBER() OVER(PARTITION BY [Parent Id] ORDER BY [Send Time]) ID FROM [dbo].[RequestEmail]) 更新 IDNUM 设置 [Conversation Id] = ID'
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多