首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Microsoft SQL -识别重复项并分配唯一标识符

Microsoft SQL -识别重复项并分配唯一标识符
EN

Stack Overflow用户
提问于 2012-01-04 15:02:24
回答 3查看 410关注 0票数 2

我已经做了很多研究,但我还没有找到一种方法来做我想做的事情。请考虑下表:

代码语言:javascript
运行
复制
| 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 

有没有办法找到所有重复项并为每个组分配一个唯一的标识符?这是我希望看到的:

代码语言:javascript
运行
复制
| 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“的声誉才能做到这一点。

感谢您能提供的任何帮助

EN

回答 3

Stack Overflow用户

发布于 2012-01-04 15:11:48

如果使用SQL Server2005或更高版本,则可以使用dense_rank()

代码语言:javascript
运行
复制
select dense_rank() over(order by OrderNumber, ZIP, PhoneNumber) as DuplicateID,
       *
from YourTable

如果您的表中有一个要更新的DuplicateID列,您可以这样做:

代码语言:javascript
运行
复制
;with C as
(
  select DuplicateID,
         dense_rank() over(order by OrderNumber, ZIP, PhoneNumber) as rn
  from YourTable
)
update C
set DuplicateID = rn
票数 3
EN

Stack Overflow用户

发布于 2012-01-04 15:12:11

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-01-04 16:41:07

您已经有了一个唯一的标识符,即OrderNumberZIPPhoneNumber的组合。

考虑到假设的“唯一标识符”PK使事实上的重复项出现,而不是阻止它们。我不认为你需要另一个这样的“唯一标识符”!

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

https://stackoverflow.com/questions/8723183

复制
相关文章

相似问题

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