使用自连接查找 SQL 中的重复项
Using self join to find duplicates in SQL
我知道还有其他类似的问题。但是,我的问题是关于为什么我使用的查询没有返回最佳结果。下面是查询。为了提供上下文,我有一个 table 有 113 columns/fields。然而,只有 4 个真正重要; acct、year、qtr、cnty(县)。 table 是一份按机构分类的雇主名单。雇主可以出现不止一次。同一个人拥有 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
这是你想要的吗?
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;
我知道还有其他类似的问题。但是,我的问题是关于为什么我使用的查询没有返回最佳结果。下面是查询。为了提供上下文,我有一个 table 有 113 columns/fields。然而,只有 4 个真正重要; acct、year、qtr、cnty(县)。 table 是一份按机构分类的雇主名单。雇主可以出现不止一次。同一个人拥有 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
这是你想要的吗?
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;