我一直在做很多研究,但我找不到办法去做我想做的事。请考虑下表:
| PK | OrderNumber | ZIP | PhoneNumber
| 1111 | 11-11 | 11111 | 111-111-1111
| 2222 | 22-22 | 22222 | 222-222-2222
| 3333 | 33-33 | 33333 | 333-333-3333
| 4444 | 44-44 | 44444 | 444-444-4444
| 5555 | 11-11 | 11111 | 111-111-1111
| 6666 | 22-22 | 22222 | 222-222-2222
| 7777 | 33-33 | 33333 | 333-333-3333
| 8888 | 44-44 | 44444 | 444-444-4444
| 9999 | 99-99 | 99999 | 999-999-9999
有没有办法找到所有重复项并为每个组分配唯一标识符?这就是我想看到的:
| DuplicateID | PK | OrderNumber | ZIP | PhoneNumber
| 1 | 1111 | 11-11 | 11111 | 111-111-1111
| 1 | 5555 | 11-11 | 11111 | 111-111-1111
| 2 | 2222 | 22-22 | 22222 | 222-222-2222
| 2 | 6666 | 22-22 | 22222 | 222-222-2222
| 3 | 3333 | 33-33 | 33333 | 333-333-3333
| 3 | 7777 | 33-33 | 33333 | 333-333-3333
| 4 | 4444 | 44-44 | 44444 | 444-444-4444
| 4 | 8888 | 44-44 | 44444 | 444-444-4444
| 5 | 9999 | 99-99 | 99999 | 999-999-9999
我知道如何查找所有重复项并将它们放在#Temp表中,但我不知道如何为每个组分配唯一标识符。
我提前为我的桌子道歉,我想发布一张图片,但显然我需要超过“10”的声誉才能做到这一点。
感谢您提供的任何帮助
答案 0 :(得分:3)
如果您使用SQL Server 2005或更高版本,则可以使用dense_rank()。
select dense_rank() over(order by OrderNumber, ZIP, PhoneNumber) as DuplicateID,
*
from YourTable
如果您想要更新表格中有DuplicateID
列,则可以这样做:
;with C as
(
select DuplicateID,
dense_rank() over(order by OrderNumber, ZIP, PhoneNumber) as rn
from YourTable
)
update C
set DuplicateID = rn
答案 1 :(得分:2)
select
dense_rank() over (order by OrderNumber , ZIP, PhoneNumber) as DuplicateID,
pk,
OrderNumber ,
ZIP,
PhoneNumber,
row_number() over (partition by OrderNumber , ZIP, PhoneNumber) as nth_duplicate
from your_table
答案 2 :(得分:1)
您已拥有唯一标识符,即OrderNumber
,ZIP
和PhoneNumber
的组合。
假设所谓的“唯一标识符”PK
已启用启用事实上的重复项,而不是阻止它们。我认为你不需要另一个这样的“唯一标识符”!