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
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
最简单的办法值的一个记录可能是使用not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.a = t.a and t2.c <> 1
);
感谢大家的帮助! – user3007002
尝试使用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)
您可以创建一个子查询,查找任何记录等于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值可能发生的,他们将不得不即使你得到一些空的记录(万一你不熟悉你的数据。 )。括号内的子查询可以自行运行以测试或查看是否需要其他条件。
您可以将此表加入自己并完成类似的操作,但我认为这个代码示例显示了意图。
我建议稍微修改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
“1或0的值”我的意思是,当然。 – datadevelopr
所以 - “C”列中唯一可能的值是0和1?它可以是'空'吗?另外,A'或'B'可以'空'吗?而且:如果你有两个相同的行,用'bob 55 1',你是否需要返回它们两个? (也就是说,如果它们存在,保留基表中的重复项?)或者保证输入中不会有重复项? – mathguy
0和1是C列中唯一可能的值。 – user3007002