如果某个字段为空,则不计算条件

时间:2018-04-26 01:10:37

标签: sql oracle

我有一张如下表:

               Table Value
-----------------------------------------
id    attribute1   attribute2   attribute3   active
232       A           null          B           Y
486      null          A           null         N
986      null         null         null         Y
509       B            C            D           N
824      null          B            C           Y
712       A            C           null         N

我需要获取id = 232,824并创建一个这样的查询:

select id 
from value 
where active = 'Y' 
and attribute1 is not null 
or attribute2 is not null 
or attribute3 is not null

但它不起作用。

我混淆了而没有在条件中使用id。 我需要使用该属性和活动标志创建where条件,(如果所有属性都为null,则只获取id)。

5 个答案:

答案 0 :(得分:3)

这很简单:

select count(*)
from t
where attribute1 is not null or attribute2 is not null or attribute3 is not null;

编辑:

您只需要正确的括号:

select count(*)
from t
where active = 'Y' and
      (attribute1 is not null or attribute2 is not null or attribute3 is not null);

答案 1 :(得分:0)

你忘了括号

select id from value where active = 'Y' 
and (attribute1 is not null or 
attribute2 is not null or 
attribute3 is not null)

答案 2 :(得分:0)

不使用OR子句的另一种方法可能是

SELECT *
FROM value
WHERE active                                                                           = 'Y'
AND DECODE(attribute1,NULL,0,1) + DECODE(attribute2,NULL,0,1)+DECODE(attribute3,NULL,0,1)>1;

这是SQL小提琴

http://sqlfiddle.com/#!4/df757/2

答案 3 :(得分:0)

我希望我理解你的问题。 您希望active等于Y且所有属性列都不包含null的所有行。

select *
from value
where active = 'Y'
   and attribute1 is not null
   and attribute2 is not null
   and attribute3 is not null

这将返回您想要的2行(Id 232& 824)。你刚搞砸了和/或。

答案 4 :(得分:0)

您声明您需要一个从测试数据集中提取ID 232和824的查询。

这里是:

select id 
  from value 
 where attribute2='B'
    or attribute3='B';