[英]Need a SQL statement to filter rows
只返回这种集合,其中集合中存在1个或多个不同的值
create table #ab
(
col1a int,
colb char(2)
)
insert into #ab
values
(1,'a'),
(1,'a'),
(1,'a'),
(2,'b'),
(2,'c'),
(2,'c')
select id,col1a,colb
from #ab
where col1a in (
Select col1a from #ab group by col1a having count (distinct colb)>1)
关于数百万行的性能,我可能会检查执行计划并处理它。使用我的示例数据集和我的查询,Distinct sort需要将近40%的成本...有数百万行,它可能会转到tempdb以及..所以我建议下面的索引可以消除更多的行
create index nci on #ab(colb)
include(col1a)
您也可以使用INNER JOIN
而不是IN
来实现它,因为它是百万行查询。
SELECT f.colA,f.colB
FROM
filtertable f
INNER JOIN
(
SELECT colA
FROM filtertable
GROUP BY colA
HAVING COUNT(DISTINCT colB)>1
) f1
ON f.colA = f1.colA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.