【问题标题】:how to return unique value and also find duplicate values? SQL如何返回唯一值并找到重复值? SQL
【发布时间】:2013-07-18 23:18:09
【问题描述】:

我有一个大致的想法来查找从这篇文章中获取的重复值: Select statement to find duplicates on certain fields

select field1,field2,field3, count(*)
  from table_name
  group by field1,field2,field3
  having count(*) > 1

这非常适合查找重复项,但我还需要提取一个唯一编号,在这种情况下,一个“订单号”列与返回的每一行一起出现。这个唯一值不能在上面的方法中使用,因为那将不会返回任何行,因为没有任何行是完全重复的。我需要能够返回这些数据,但还要找到在表中多次出现的记录。我认为这可以通过联合或使用存在来完成,但不确定如何实现。有什么想法吗?

示例结果思路:

order number, field1, field2, field3
123             a       b        c
456             d       e        f
789             a       b        c

希望它像这样返回订单号 123 和 789:

order number, field1, field2, field3
123             a       b        c
789             a       b        c   

【问题讨论】:

  • 样本数据和预期结果会很有帮助。
  • 它可以与子查询一起使用吗?认为我们需要更多信息
  • “订单”是与 table_name 关联的字段吗?
  • 是的,一切都在同一张桌子上

标签: sql sql-server tsql sql-server-2005


【解决方案1】:
;with a as
(
select count(*) over (partition by field1,field2,field3) count, order_number, field1,field2,field3
from table_name
)
select order_number, field1,field2,field3 from a where count > 1

【讨论】:

    【解决方案2】:

    我不完全确定这是否是您想要的,但听起来可能吗?

    select min(t2.order_no), t2.field1, t2.field2, t2.field3, t1.cnt
    from table_name t2, (
        select field1,field2,field3, count(*)
          from table_name
          group by field1,field2,field3
          having count(*) > 1
          ) t1
    where t1.field1 = t2.field1      
    and t1.field2 = t2.field2
    and t1.field3 = t2.field3
    group by t2.field1, t2.field2, t2.field3, t1.cnt
    

    对于您的去重子查询中返回的每条记录,外部查询将附加到该记录与给定字段组合匹配的最小“订单号”。如果这不是您要查找的内容,请澄清。一些示例数据和示例输出会有所帮助。

    编辑:从您发布的示例数据来看,您似乎只是希望返回具有重复项的记录。如果这就是你要找的东西,试试这个:

    select * 
    from  table_name t2
    where exists (
        select field1,field2,field3, count(*)
          from table_name t1
          where t1.field1 = t2.field1      
          and t1.field2 = t2.field2
          and t1.field3 = t2.field3 
          group by field1,field2,field3
          having count(*) > 1
          )
    

    SQLFiddle

    【讨论】:

    • 我知道你现在要做什么了,不完全是我想要的答案,但我没有像我应该做的那样清楚,谢谢你的回复
    • 您发布的示例结果中没有“计数”。如果您只是在寻找返回具有重复行的查询,请查看我更新的答案。
    • @PaulWIlliams 引用了第二个查询。
    • 你的两个解决方案都无效
    • 最后的t1会报错。您不能在 where 子句中命名项目
    猜你喜欢
    • 2016-04-30
    • 2017-04-05
    • 1970-01-01
    • 2021-12-23
    • 2018-04-02
    • 1970-01-01
    • 2021-01-23
    • 2018-03-01
    • 2017-07-12
    相关资源
    最近更新 更多