选择记录中仅具有特定值的所有行

时间:2015-10-26 20:42:10

标签: sql-server

我有一个包含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 ..

http://sqlfiddle.com/#!9/731e1

3 个答案:

答案 0 :(得分:4)

您可以使用:

SELECT id
FROM cards
GROUP BY id
HAVING MIN(type) = MAX(type)

Demo here

答案 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