【问题标题】:SQL: Select Distinct from specific columnSQL:从特定列中选择不同
【发布时间】:2018-10-15 02:56:22
【问题描述】:

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

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

有点像从 excel 中删除重复项时如何指定要考虑的列

真诚地, 克里斯

【问题讨论】:

  • 我们需要查看您的表结构和您现在拥有的查询。您可以为唯一的一列选择不同的记录,然后从表中选择一些 ID,然后使用外部查询从该表中选择所有字段,其中包含 ID(来自子选择)。这可能/可能不起作用,具体取决于您的结构和数据的布局方式,如果您可以发布我们可以获得更好的答案
  • 您可以使用 GROUP BY/Aggregation:SELECT employee_name, employee_id, max(telephone), max(email_addr) FROM table GROUP BY employee_name, employee_id; 如果您不想在输出中使用电话或其他不明显的列,那么您可以选择您想要的内容并粘贴所有GROUP BY 中的那些列。
  • 关于 SQL 查询的问题,有 15 行文本,没有任何代码、表结构和数据,这不是一个好问题。请编辑您的问题并添加所有这些。

标签: sql duplicates distinct ms-access-2013


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    假设我们有一个名为 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
    )
    

    它已经过全面测试并且可以使用,您只需填写列列表并在最终选择时指定差异。

    瞧!!

    【讨论】:

    • OP 是否要从查询或基表中“删除”数据?查询没有说明这一点。他可能只是想过滤查询的数据,而不是从基表中删除。
    • 这是为了如果他想从表中删除。但是对于单独的过滤,它可以减少到只有 cte2 的结果。过滤场景更加简单。我认为删除是意图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多