如何选择状态只在一组中的记录?

时间:2013-03-28 07:07:25

标签: sql sql-server select

假设我有以下表格 Person tablepersonStatus table

declare @Persons table
(PersonId int)

insert into @Persons select 10   
insert into @Persons select 11    
insert into @Persons select 12   
insert into @Persons select 13  
insert into @Persons select 14    

declare @PersonStatus table
(id int,statuss int)
insert into @PersonStatus (id,statuss) values(14,4)
insert into @PersonStatus (id,statuss) values(10,0)
insert into @PersonStatus (id,statuss) values(10,0)
insert into @PersonStatus (id,statuss) values(11,1)
insert into @PersonStatus (id,statuss) values(10,1)
insert into @PersonStatus (id,statuss) values(11,2)
insert into @PersonStatus (id,statuss) values(12,0)
insert into @PersonStatus (id,statuss) values(12,1)
insert into @PersonStatus (id,statuss) values(12,2)
insert into @PersonStatus (id,statuss) values(13,1)
insert into @PersonStatus (id,statuss) values(13,3)

现在我想找到他们的状态只在这个集{0,1,2}中的人ID 结果是---> 10,11,12

怎么做?

2 个答案:

答案 0 :(得分:3)

SELECT  ID
FROM    PersonStatus
GROUP   BY ID
HAVING  SUM(CASE WHEN statuss IN (0, 1, 2) THEN 1 ELSE 0 END) >= 1 AND
        SUM(CASE WHEN statuss NOT IN (0, 1, 2) THEN 1 ELSE 0 END) = 0

答案 1 :(得分:2)

试试这个

SELECT DISTINCT ID
FROM @PersonStatus PT
WHERE NOT EXISTS (SELECT * FROM @PersonStatus WHERE statuss not in (0,1,2) AND id=PT.id)