2017-02-21 58 views
1
A B C 
1 bob 55 0 
2 bob 55 1 

我需要帮助我的where子句。上面的例子显示Bob有两个记录。我只想显示记录是否所有Bob的记录在列C中的值都是1。如果Bob的记录中有一个记录的值为0,那么它应该不会为Bob返回任何值。目前,我只能够得到它返回拥有的1SQL哪里条款帮助需要

现有查询

select a, b, c 
from table 
where b = 55 and c = 1 
+0

所以 - “C”列中唯一可能的值是0和1?它可以是'空'吗?另外,A'或'B'可以'空'吗?而且:如果你有两个相同的行,用'bob 55 1',你是否需要返回它们两个? (也就是说,如果它们存在,保留基表中的重复项?)或者保证输入中不会有重复项? – mathguy

+0

0和1是C列中唯一可能的值。 – user3007002

回答

1

最简单的办法值的一个记录可能是使用not exists

select t.* 
from t 
where not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.c <> 1 
       ); 
+0

感谢大家的帮助! – user3007002

0

尝试使用NOT EXISTS如下

select a, b, c 
    from table t 
    where t.b = 55 and not exists (select 1 from table t2 
    where t2.b=t.b and t2.c=0) 
0

您可以创建一个子查询,查找任何记录等于1。如果发生这种情况,你不会包含它们。

select a, b, c 
    from table as t 
    where not exists (
     select * 
     from table as t1 
     where t.a = t1.a and IsNull(t1.c, -1) <> 1 
    ) 

这样,就不会不管什么品种列C值可能发生的,他们将不得不即使你得到一些空的记录(万一你不熟悉你的数据。 )。括号内的子查询可以自行运行以测试或查看是否需要其他条件。

您可以将此表加入自己并完成类似的操作,但我认为这个代码示例显示了意图。

1

我建议稍微修改SQL(包含在WHERE子句戈登只具备):

select t.a, t.b, t.c 
from table t 
where t.b = 55 and t.c = 1 and not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.b = t.b and t2.c = 0 
       ); 

马西米诺的解决方案也适用,假设C列永远只具有或1值2

+0

“1或0的值”我的意思是,当然。 – datadevelopr