上下文: 我正在为工作项目开发Access 2013数据库。它访问一些后端系统,并将它们组合在一起进行报告。其中一个系统包含员工数据。我正在编写一个SQL查询语句来从某个部门提取活跃员工列表。但是,当我运行它时,我注意到一些员工在数据库中列出了两次。我无权编辑后端数据!所以我必须从我身边删除重复项。 当我尝试选择不同的值时,它不算数,因为我在其他列中提取的信息的“一些”是不同的(如tel#)。
问题: 如何仅基于一列中的信息而不是整个表来消除查询中的重复值?有没有办法用DISTINCT或其他选项来做到这一点?
类似于从excel中删除重复项时的方式,您可以指定要考虑的列
此致 克里斯
答案 0 :(得分:0)
基本上有两种方法可以做到这一点。
答案 1 :(得分:-1)
假设我们有一个名为Department的表,它有4列,如 DptName,DptAddress,DptCode,DptTel。现在我们要删除所有前3个相同的记录,并且只在DptTel上有所不同。
(您可以将此容纳到您的实际表和相等逻辑)
这是一个实现目标的查询
;with cte as (
select DptName, count(DptName) as cnt
from Department
group by DptName, DptAddress, DptCode
having count(DptName) > 1
)
, cte2 as (
select top 1 * from Department
where exists (
select *
from cte
where cte.DptName = Department.DptName
)
union
select * from Department
where not exists (
select *
from cte
where cte.DptName = Department.DptName
)
)
delete from Department
where not exists (
select *
from cte2
where cte2.DptTel = Department.DptTel
)
它已经过全面测试并且可以使用,您只需填写列列表并指定最终选择的差异。
Voila !!