我们有一个CRM数据库,该数据库在过去6周内一直在创建重复的CaseID
我需要进去把新的案例id的20000000范围给所有的复本。
所以我找到了像这样的复制品
SELECT CaseNumber,
COUNT(CaseNumber) AS NumOccurrences
FROM Goldmine.dbo.cases
WHERE CaseNumber > 9000000
GROUP BY CaseNumber
HAVING ( COUNT(CaseNumber) > 1 )又带回了这个。

我现在需要对其中的每一个重新编号,如20000001、20000002等
任何帮助都是最好的。
发布于 2020-07-06 01:24:09
我将假设您使用的是SQL Server。因此,您可以使用可更新的CTE:
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使用它来分配新的编号。
发布于 2020-07-06 02:09:33
从数据的外观看,你已经得到了数字上的重叠,因为如果我们要递增1,就会有与“更新”值重叠的记录。
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;初始记录集
+-----------+
| orig_data |
+-----------+
| 10000009 |
| 10000009 |
| 10000009 |
| 10000009 |
| 10000010 |
| 10000010 |
| 10000011 |
+-----------+更新后
+-----------+
| after_upd |
+-----------+
| 10000010 |
| 10000011 |
| 10000012 |
| 10000014 |
| 10000015 |
| 10000017 |
+-----------+https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=c4ea8335abb074b8c0143e2f7c767f04
https://stackoverflow.com/questions/62743957
复制相似问题