SQL:从特定列中选择“不同”

时间:2018-05-04 15:06:28

标签: sql duplicates distinct ms-access-2013

上下文: 我正在为工作项目开发Access 2013数据库。它访问一些后端系统,并将它们组合在一起进行报告。其中一个系统包含员工数据。我正在编写一个SQL查询语句来从某个部门提取活跃员工列表。但是,当我运行它时,我注意到一些员工在数据库中列出了两次。我无权编辑后端数据!所以我必须从我身边删除重复项。  当我尝试选择不同的值时,它不算数,因为我在其他列中提取的信息的“一些”是不同的(如tel#)。

问题: 如何仅基于一列中的信息而不是整个表来消除查询中的重复值?有没有办法用DISTINCT或其他选项来做到这一点?

类似于从excel中删除重复项时的方式,您可以指定要考虑的列

此致 克里斯

2 个答案:

答案 0 :(得分:0)

基本上有两种方法可以做到这一点。

  1. 您可以使用distinct。
  2. 您可以在特定列上使用group by。它将确保列值在结果中是唯一的。

答案 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 !!