首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对有重复项的记录重新发放ids

对有重复项的记录重新发放ids
EN

Stack Overflow用户
提问于 2020-07-06 01:17:16
回答 2查看 86关注 0票数 2

我们有一个CRM数据库,该数据库在过去6周内一直在创建重复的CaseID

我需要进去把新的案例id的20000000范围给所有的复本。

所以我找到了像这样的复制品

代码语言:javascript
复制
SELECT CaseNumber, 
    COUNT(CaseNumber) AS NumOccurrences
FROM Goldmine.dbo.cases
WHERE CaseNumber > 9000000
GROUP BY CaseNumber
HAVING ( COUNT(CaseNumber) > 1 )

又带回了这个。

我现在需要对其中的每一个重新编号,如20000001、20000002等

任何帮助都是最好的。

EN

回答 2

Stack Overflow用户

发布于 2020-07-06 01:24:09

我将假设您使用的是SQL Server。因此,您可以使用可更新的CTE:

代码语言:javascript
复制
WITH dups as (
      SELECT c.*,
             ROW_NUMBER() OVER (ORDER BY CaseNumber) as seqnum
      FROM Goldmine.dbo.cases c
      WHERE CaseNumber > 9000000
     ),
     toupdate as (
      SELECT d.*, ROW_NUMBER() OVER (PARTITION BY CaseNumber ORDER BY CaseNumber) as inc
      FROM dups d
      WHERE seqnum > 1
     )
UPDATE toupdate
    SET CaseNumber = 20000000 + inc;

第一个子查询通过枚举重复项来标识重复项。想必,您不希望“第一个”更改。因此,第二个CTE只选择真正的副本,并分配一个序列号。外部update使用它来分配新的编号。

票数 0
EN

Stack Overflow用户

发布于 2020-07-06 02:09:33

从数据的外观看,你已经得到了数字上的重叠,因为如果我们要递增1,就会有与“更新”值重叠的记录。

代码语言:javascript
复制
with data
  as (select *
            ,count(*) over(partition by x) as cnt
            ,row_number() over(order by x) as rnk
        from t
      )
update data
   set x = x+rnk;

初始记录集

代码语言:javascript
复制
+-----------+
| orig_data |
+-----------+
|  10000009 |
|  10000009 |
|  10000009 |
|  10000009 |
|  10000010 |
|  10000010 |
|  10000011 |
+-----------+

更新后

代码语言:javascript
复制
+-----------+
| after_upd |
+-----------+
|  10000010 |
|  10000011 |
|  10000012 |
|  10000014 |
|  10000015 |
|  10000017 |
+-----------+

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=c4ea8335abb074b8c0143e2f7c767f04

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62743957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档