【问题标题】:Finding duplicates with two similar columns and one distinct查找具有两个相似列和一个不同列的重复项
【发布时间】:2013-02-20 10:43:41
【问题描述】:

我需要在两个特定列中选择具有相同内容的行,并在第三列中选择不同内容的行。到目前为止,我为两个类似的列得到了这个:

SELECT id, Title,
COUNT(*) AS NumOccurrences
FROM Table
GROUP BY id, Title
HAVING ( COUNT(*) > 1 )

我现在需要在此查询中指定第三个不同的列。我们就叫它拉尔夫吧。这显然不起作用:

SELECT id, Title, DISTINCT Ralph,
COUNT(*) AS NumOccurrences
FROM Table
GROUP BY id, Title
HAVING ( COUNT(*) > 1 )

那会怎样?

【问题讨论】:

  • 你使用的是什么 sql sever 版本?
  • 对不起,SQL Server 2008

标签: sql sql-server sql-server-2008 duplicates distinct


【解决方案1】:
select * from (
    SELECT id, Title, COUNT(*) AS NumOccurrences
    FROM Table t
    GROUP BY id, Title
    HAVING ( COUNT(*) > 1 )
) t
cross apply (
    select distinct Ralph
    from Table
    where id = t.id and Title = t.Title
) t2

【讨论】:

  • 感谢您的帮助!但遗憾的是:“子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。”
  • 也许我应该指定它不是一个唯一的 id,它是一个外国 id
【解决方案2】:

您可以将 COUNT(*) 与 OVER() 子句一起使用

 ;WITH cte AS
 (       
  SELECT id, Title, Ralph, COUNT(*) OVER (PARTITION BY id, Title) AS cnt
  FROM dbo.test11
  GROUP BY id, Title, Ralph
  ) 
  SELECT *
  FROM cte
  WHERE cnt > 1

SQLFiddle上的演示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多