我有一个包含id,类型的表。
我想选择只有一个或多个相同类型记录的所有ID。
例如,
假设这是我的表:
id type
456 4
123 4
123 4
123 18
123 4
789 4
789 4
000 7
我想获取ID:456,789因为这些ID只有type = 4的记录:
456有一条记录,789有两条类型= 4的记录。
123的type = 4,但是type = 18。
我该怎么做?
我知道我可以使用分区,但我想要一些像join / exists ..
答案 0 :(得分:4)
答案 1 :(得分:3)
Select Id
FROM cards
GROUP BY Id
HAVING COUNT(DISTINCT [type]) = 1
答案 2 :(得分:0)
我不认为@ M.Ali会回答你的标准。他的结果集包括id ='000'
if OBJECT_ID('Tempdb..#Work') is not null
drop table #Work;
Create Table #Work (Id char(3), [Type] int)
insert into #Work values
( '456', 4)
, ('123', 4)
, ('123', 4)
, ('123', 18)
, ('123', 4)
, ('789', 4)
, ('789', 4)
, ('000', 7)
select distinct *
from #Work a
where exists (
select Type
,Count(Distinct Id) cntId
from #Work b
where a.Type = b.Type
group by Type
having Count(Distinct Id) > 1
)
and exists (
select Id
,count(distinct Type)
from #Work c
where a.Id = c.Id
group by id
having count(distinct type)= 1
)
输出:
Id Type
---- -----------
456 4
789 4