Sql 仅当存在多个的实例时才查找记录

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种类型

我有一张大概有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的数据,其中有多个类型

预期结果:

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很乐意帮忙!来自审查队列:我可以请求您在源代码周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将对提问者和未来的读者都有帮助。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。