首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:根据不同的条件删除重复项,实际上会创建新的记录

SQL:根据不同的条件删除重复项,实际上会创建新的记录
EN

Stack Overflow用户
提问于 2021-05-17 22:50:59
回答 1查看 25关注 0票数 0

我有一个包含重复项的数据库(dbo)。特别是,一名员工可以在同一业务(业务代码)中担任两个角色(角色编号),也可以在相同或不同区域(区号)的不同业务中担任两个/同一角色,如下所示:

我想要的是删除重复记录。因此,我创建了以下代码:

代码语言:javascript
复制
Select 
   dbo.year,
   min(dbo.RoleNumber) AS Role,
   min(dbo.AreaCode) AS Area,
   min(dbo.BusinessCode) AS BCode,
   dbo.EmployeeNumber
From dbo
Group by dbo.year, dbo.EmployeeNumber

当个人在具有最低编号和最低区域(例如,我的示例中的第n* 3和4行)的企业中担任最低角色时,或者在重复记录中区号和业务代码相同(例如,第n* 1和2行)时,此代码工作得很好。

但是,在某些情况下,个人的最低角色与较高的业务代码或/和区号相关联。在这种情况下,SQL会创建组合这些元素的新记录,请参阅以下示例:

代码语言:javascript
复制
rows 5-10:  2018, 651, 5110, 3, 17;
rows 11-13: 2018, 649, 6215, 4, 20;
rows 14-15: 2018, 750, 5101, 5, 24.

这本身并不是问题,但当我连接表以获取这些员工的额外数据时,这是有问题的。连接表的关键元素是面积、业务代码和雇员编号,但是在我的代码中,SQL正在创建其他表中不存在的新记录,这会导致额外的数据为空。

有没有办法解决这个问题?我需要SQL总是首先选择最低的角色编号,如果角色编号相同,那么应该选择最低的机构编号,如果相同,最后应该选择最低的区号。

因此,例如,我预计会像这样检索产生问题的三个记录:

代码语言:javascript
复制
rows 5-10:  2018, 651, 6319, 3, 17;
rows 11-13: 2018, 650, 6215, 4, 20;
rows 14-15: 2018, 750, 8076, 5, 24.

谢谢

西尔维娅

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-17 22:57:05

您可以使用窗口函数:

代码语言:javascript
复制
select * from 
  ( 
    select * , row_number() over (partition by year, employeenumber order by rolenumber,businesscode,areacode) rn 
    from youratble
  ) t
where rn = 1

你可以在窗口函数中使用order by来选择你想要的行。

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

https://stackoverflow.com/questions/67572035

复制
相关文章

相似问题

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