Sql 仅当存在多个的实例时才查找记录
我有一张大概有700k条记录的桌子。桌子的结构看起来像这样Sql 仅当存在多个的实例时才查找记录,sql,sql-server-2012,Sql,Sql Server 2012,我有一张大概有700k条记录的桌子。桌子的结构看起来像这样 ID Type ValueA 553 1 DCM 553 2 DCMM 586 1 ADM 587 1 HDD 587 2 HDS 基本上,我可以在ID中有多个值,如示例中所示的553和587。在Type中,每个后续记录的类型递增一。所以553从Type=1开始,然后是2。有些记录有多达12种类型
ID Type ValueA
553 1 DCM
553 2 DCMM
586 1 ADM
587 1 HDD
587 2 HDS
基本上,我可以在ID中有多个值,如示例中所示的553和587。在Type
中,每个后续记录的类型递增一。所以553从Type=1开始,然后是2。有些记录有多达12种类型。我试图找出是否有一种方法可以查询这个表,只显示ID的数据,其中有多个类型
预期结果:
ID Type ValueA
553 1 DCM
553 2 DCMM
587 1 HDD
587 2 HDS
我应该得到这些记录,因为553有2个实例,587也有。586将不包括在内,因为它只有一个记录
任何帮助都将不胜感激。如果
type
是顺序的,并且按照您的建议以1
开头,您可以像这样使用exists()
:
select *
from t
where exists (
select 1
from t i
where i.id = t.id
and i.type > 1
)
否则,您可以在使用聚合和having()
的派生表上进行联接,以查找具有多行的id
,如下所示:
select t.*
from t
inner join (
select Id
from t
group by Id
having count(*) > 1
) as dup
on t.id = dup.id
rextester演示(适用于两者): 退货(两种类型):
如果
type
是顺序的,并且按照您的建议以1
开头,您可以像这样使用exists()
:
select *
from t
where exists (
select 1
from t i
where i.id = t.id
and i.type > 1
)
否则,您可以在使用聚合和having()
的派生表上进行联接,以查找具有多行的id
,如下所示:
select t.*
from t
inner join (
select Id
from t
group by Id
having count(*) > 1
) as dup
on t.id = dup.id
rextester演示(适用于两者): 退货(两种类型):
我想这就是你要找的
SELECT ID, Type, ValueA
FROM TABLE
GROUP BY ID, Type, ValueA
HAVING COUNT(ID) > 1
ORDER BY ID, Type, ValueA
我想这就是你要找的
SELECT ID, Type, ValueA
FROM TABLE
GROUP BY ID, Type, ValueA
HAVING COUNT(ID) > 1
ORDER BY ID, Type, ValueA
试试这个:)
试试这个:)
使用子查询的另一个选项:
select * from t where id in (
select distinct ID
from t
group by id
having count(*) > 1
)
演示:使用子查询的另一个选项:
select * from t where id in (
select distinct ID
from t
group by id
having count(*) > 1
)
演示:您是否尝试指定字段?我只是为了方便才这么做的。你绝对肯定这行吗?请看此演示-----它不返回任何内容。如果这样分组,则
COUNT(ID)
将为每行1(对于OP的示例数据)。@BobSki您提供了有效的示例数据吗?我不知道这个查询将如何返回您提供的所需结果。是否有重复的ID、类型、值A组合?是否尝试指定字段?我只是为了方便才这么做的。你绝对肯定这行吗?请看此演示-----它不返回任何内容。如果这样分组,则COUNT(ID)
将为每行1(对于OP的示例数据)。@BobSki您提供了有效的示例数据吗?我不知道这个查询将如何返回您提供的所需结果。你有重复的ID、类型、ValueA组合吗?@BobSki很乐意帮忙@BobSki很乐意帮忙!来自审查队列:我可以请求您在源代码周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将对提问者和未来的读者都有帮助。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。