【问题标题】:SQL: Select Duplicate Values using Distinct, Not Exists, CTE, UnionSQL:使用 Distinct、Not Exists、CTE、Union 选择重复值
【发布时间】:2017-05-28 04:34:59
【问题描述】:

我需要从下面显示的对象表中选择以绿色突出显示的重复值:

我尝试了以下代码的不同组合。但不能返回两个重复的行。

;with CTE as
    (Select distinct ID, count([Object ID]) as [Object ID] 
from #Object 
     group by ID having count([Object ID]) > 1)

select * from CTE where 
    NOT EXISTS (Select distinct ID , count(distinct [Object ID]) as [Object ID] 
from #Object group by ID having count(distinct [Object ID]) > 1);

【问题讨论】:

    标签: sql-server duplicates union common-table-expression not-exists


    【解决方案1】:

    您可以使用窗口函数 ROW_NUMBER() 来识别重复行。

    Declare @YourTable table (ID int,ObjectID int,ObjectName varchar(50))
    Insert into @YourTable values
    (250708,321,'hotel'),
    (250708,343,'mercantile'),
    (250708,370,'parking'),
    (250708,370,'residential condominium'),
    (250708,370,'residential condominium'),
    (250708,401,'residential condominium'),
    (250708,401,'residential condominium')
    
    
    
    ;with cte as (
        Select *
              ,RN = Row_Number() over ( Partition By ID,ObjectID,ObjectName Order by (Select NULL))
         From  @YourTable
    )
    Select * 
     From cte 
     Where RN>1
    

    返回

    在旁注中,您可以通过将最后的 Select * 替换为 DELETE 来删除这些记录

    【讨论】:

    • 这将错过任何重复集中的第一行。
    • @MartinSmith 仅突出显示第二个欺骗
    • @MartinSmith 很高兴知道这可能发生在您的排名和声誉的某个人身上。 :)
    • 约翰,你必须在 NULL 之后删除括号并放置两个 aster "YourTable" 。
    • 约翰,当我解析代码时它说:命令成功完成。但是当我实际执行它时说:1.必须指定要从中选择的表。列名无效.... 2. 列名“ID”无效,列名“对象 ID”无效... 3. 列名“对象名”无效,4. 没有为“cte”的第 1 列指定列名
    【解决方案2】:

    下面是第一个答案中代码的正确版本

    ;With cte as (
            Select *
                  ,RN = Row_Number() over (Partition By ID, [Object ID] Order by (Select NULL))
           From tblObject 
         )
    
        Select *
         From cte 
         Where RN>1;
    

    【讨论】:

    • 干得好! +1 只是对未来的暗示。如果您将示例数据发布为可以复制和粘贴的文本而不是图像,则会更有帮助。这样我们就可以测试 SQL 的正确字段名称和/或语法,
    猜你喜欢
    • 2017-08-26
    • 2022-10-24
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2018-03-01
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多