首页 > 解决方案 > 使用自连接查找 SQL 中的重复项

问题描述

我知道还有其他类似的问题。但是,我的问题是为什么我使用的查询没有返回最佳结果。下面是查询。为了给出上下文,我有一个包含 113 列/字段的表。但是,真正重要的只有 4 个;acct,年份,qtr,cnty(县)。此表是按机构列出的雇主列表。雇主可以出现不止一次。同一个人拥有 12 家星巴克就是最好的例子。我正在寻找的是一个查询,它将显示 acct 值何时具有不同的 cnty 值。下面的查询可以正常工作,但显示的太多了。它显示了 acct 值相同但 cnty 值也相同的行。关于查看此查询以了解为什么它显示太多的任何想法?

  select distinct t1.acct, t1.year, t1.qtr, t1.cnty
  from dbo.table t1 join dbo.table t2 on t1.acct=t2.acct
  where (t1.cnty <> t2.cnty)
  order by t1.acct, t1.year, t1.qtr, t1.cnty

预期结果

  acct                                               year        qtr         cnty
  1234567777                                         2007        4           7
  1234567777                                         2008        1           9
  1234567890                                         2006        4           31
  1234567890                                         2007        1           3
  2345678901                                         2006        4           7
  2345678901                                         2007        2           1

标签: sqlduplicatesself-join

解决方案


这是你想要的吗?

  select distinct t.acct, t.year, t.qtr, t.cnty
  from (select t.*, min(cnty) over (partition by acct, year, qtr) as min_cnty,
               max(cnty) over (partition by acct, year, qtr) as max_cnty
        from dbo.table t
       ) t
  where min_cnty <> max_cnty;

推荐阅读