0

假设我有以下表格 Person tablepersonStatus table如何选择所有状态为零的记录?

declare @Persons table 
(PersonId int) 

insert into @Persons select 10 
insert into @Persons select 11  

declare @PersonStatus table 
(id int,statuss int) 

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,0) 
insert into @PersonStatus (id,statuss) values(11,0) 

现在我想找到的人ID的其状态的所有为零 结果只是---> 10

怎么办呢?

+0

是否要返回子表中没有行的人? – 2013-03-27 12:33:43

+0

不,这不是我的场景 – 2013-03-27 12:35:46

+0

你想只返回所有状态为零的人吗? – 2013-03-27 12:36:18

回答

1
SELECT id 
FROM @PersonStatus 
GROUP BY ID 
HAVING COUNT(DISTINCT statuss) = 1 AND 
     MAX(statuss) = 0 

OR

SELECT id 
FROM @PersonStatus 
GROUP BY ID 
HAVING MAX(statuss) = MIN(statuss) AND 
     MAX(statuss) = 0 
0
select distinct p.id from @PersonStatus as p 
where Statuss = 0 
and not exists (select null from @Personstatus as t 
       where p.id = t.id and t.statuss <> 0) 
1

由于我认为@Persons表不只有一个PersonId列,您可能需要其他列,我认为@Persons需要成为查询的一部分。

SELECT p.PersonId --, other columns from p 
FROM @Persons AS p 
WHERE EXISTS (SELECT id FROM @PersonStatus 
    WHERE id = p.PersonId 
    GROUP BY id HAVING MAX(statuss) = 0);