我已经做了很多研究,但我还没有找到一种方法来做我想做的事情。请考虑下表:
| 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“的声誉才能做到这一点。
感谢您能提供的任何帮助
发布于 2012-01-04 15:11:48
如果使用SQL Server2005或更高版本,则可以使用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
发布于 2012-01-04 15:12:11
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
发布于 2012-01-04 16:41:07
您已经有了一个唯一的标识符,即OrderNumber
、ZIP
和PhoneNumber
的组合。
考虑到假设的“唯一标识符”PK
使事实上的重复项出现,而不是阻止它们。我不认为你需要另一个这样的“唯一标识符”!
https://stackoverflow.com/questions/8723183
复制相似问题