【问题标题】:how to identify the duplicate rows in a table如何识别表中的重复行
【发布时间】:2018-06-10 23:47:07
【问题描述】:

我有一个表,其中 4 列 code1、code2、code3 和 code4

所以那些可以包含如下数据(下面显示 2 条记录)

code1=xy code2=yz code3='' code4=''
code1=xy code2='' code3=yz code4=''

我们需要使 2 记录重复,因为它包含分散在不同列上的相同数据。请帮帮我

【问题讨论】:

  • 列中值的顺序是否重要,即code1=1, code2=2 等于code1=2, code2=1
  • 请向我们展示更多示例数据。
  • 你的桌子叫什么?
  • code1=1, code2=2 等价于 code1=2, code2=1 是的,它是一样的。所以值可以分散在列中。请帮帮我
  • 有主键列吗?它叫什么名字?

标签: sql sql-server


【解决方案1】:

您可以使用 from This 来查找重复值

Detect duplicate items in recursive CTE

WITH cte AS (
SELECT ROW_NUMBER()OVER(PARTITION BY [FieldName] ORDER BY [FieldName])[Rank],* 
FROM TableName)
SELECT * 
FROM  cte 
WHERE cte.[Rank]>1

【讨论】:

    【解决方案2】:

    您在这里可能拥有的是一个多对一的关系,有人将其硬塞到一个表中,这会产生比它解决的问题更多的问题。

    我建议修复您的架构,然后您将能够更轻松地解决此类问题。

    例如,如果列 code1、code2、code3 和 code4 位于雇员表中,如下所示:

    employee table
    |employeeid |name |code1 |code2 |code3 |code4 |
    |1          |bob  |xy    |yz    |      |      |
    |2          |sam  |xy    |      |yz    |      |
    

    然后您可以将数据重组为两个表:

    employee table
    |employeeid |name |
    |1          |bob  |
    |2          |sam  |
    
    code table
    |employeeid |code |
    |1          |xy   |
    |1          |yz   |
    |2          |xy   |
    |2          |yz   |
    

    这将使找到具有相同代码的人变得更加容易(并消除可能存在四个代码的任意限制)

    【讨论】:

    • 我同意这一点.. 但它是第三方工具.. 所以我无法更改数据库设计,如果您可以针对上述问题提出一些解决方案而无需任何设计更改,那就太好了
    • 很公平 - 如果您在问题中提到这种情况,它会有所帮助;)
    • 对不起..请帮帮我
    • 有人可以帮我吗?
    【解决方案3】:

    如果您不关心列的顺序,您可以通过以下方式获取唯一值:

    select distinct x.*
    from t cross apply
         (select max(case when seqnum = 1 then col end) as col1,
                 max(case when seqnum = 2 then col end) as col2,
                 max(case when seqnum = 3 then col end) as col3,
                 max(case when seqnum = 4 then col end) as col4
          from (select col, row_number() over (order by col desc) as seqnum
                from (values (col1), (col2), (col3), (col4)) v(col)
               ) x
         ) x
    

    【讨论】:

    • 似乎这行得通.. 但我还需要一列以及 col1、col2、col3 和 col4,那么只有它对我有用。感谢您的帮助Plz
    • 嗨戈登,似乎很接近,但没有按预期工作。请帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2021-01-31
    • 2020-12-31
    相关资源
    最近更新 更多