1

有一个表,如下所示:
enter image description here需要一个SQL语句来过滤行

我需要检索只强调记录。我需要一个查询,它应该可以在更大的表上存在数百万条记录。

标准:
有4台,第一和第三具有相似的值,但第二和第四套具有不同的值

编辑:
我在表中进行轻微修改(ID列添加)。我们如何才能达到与ID列相同的?

enter image description here

+6

不错。我想要一本新的Mac书,但没有显示出努力,没有人会为我购买它。 –

+0

不会从可乐(2,4)工作表中选择可乐,colb – TheGameiswar

+1

要突出显示的行的标准是什么? – Richard

回答

3

回报只有这种套,其中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) 

关于性能超过数百万行的存在,我可能会检查执行计划和处理it.with我的样本数据集和我的查询,独特的排序花费近40%的成本...与数百万行,它可能也会去tempdb ..所以我建议下面的索引,可以消除更多的行

create index nci on #ab(colb) 
include(col1a) 
+0

谢谢@TheGameiswar它作品。你节省了我的日子 – Deepak

+0

很高兴帮助你,如果你可以发布DDL,DML(测试数据就像我在答案中的那样)以及期望的结果作为文本以及解释和你已经尝试过的东西..你会得到更快的结果 – TheGameiswar

+0

否我不想在现有的表上创建索引,我只需要选择这种行 – Deepak

0

您也可以使用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