需要一个 SQL 语句来过滤行

Need a SQL statement to filter rows

有一个 table 看起来像这样:

我只需要检索突出显示的记录。我需要一个查询,它应该在更大的 table 上工作,其中存在数百万条记录。

条件:
有 4 组,第 1 组和第 3 组具有相似的值,但第 2 组和第 4 组具有不同的值

编辑:
我在 table(添加了 ID 列)中做了细微修改。我们如何使用 ID 列实现相同的效果?

return only this kind of set where 1 or more different value exists in the set

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)

关于数百万行的性能,我可能会检查执行计划并处理 it.with 我的样本数据集和我的查询,不同排序占成本的近 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