需要一个SQL语句来过滤行
有一个表,如下所示:需要一个SQL语句来过滤行
我需要检索只强调记录。我需要一个查询,它应该可以在更大的表上存在数百万条记录。
标准:
有4台,第一和第三具有相似的值,但第二和第四套具有不同的值
编辑:
我在表中进行轻微修改(ID列添加)。我们如何才能达到与ID列相同的?
回报只有这种套,其中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)
谢谢@TheGameiswar它作品。你节省了我的日子 – Deepak
很高兴帮助你,如果你可以发布DDL,DML(测试数据就像我在答案中的那样)以及期望的结果作为文本以及解释和你已经尝试过的东西..你会得到更快的结果 – TheGameiswar
否我不想在现有的表上创建索引,我只需要选择这种行 – Deepak
您也可以使用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
不错。我想要一本新的Mac书,但没有显示出努力,没有人会为我购买它。 –
不会从可乐(2,4)工作表中选择可乐,colb – TheGameiswar
要突出显示的行的标准是什么? – Richard