我有这个表:
dates var1 var2
2004 null null
2005 null null
2006 null null
2007 null null
2008 25 null
2009 30 null
2010 50 30
2011 60 50
2012 null 70
2013 null 80
2014 null 90
我需要一个查询以下结果:
dates var1 var2
2008 25 null
2009 30 null
2010 50 30
2011 60 50
2012 null 70
2013 null 80
2014 null 90
我尝试过:
select * from table where var1 is not null
但是有必要保留后续的null。
如果您已经声明要选择不是var1
和var2
都是null
的所有行,或者换句话说,这两个行中的任何一个都不是null
,那么情况会更清楚。然后它就像一样简单
select * from table where var1 is not null or var2 is not null
您只需使用:
select * from table where nvl(var1,var2) is not null
逻辑似乎是,对于返回集,这两列不应该同时为null。这意味着考虑两列同时为null
的情况(var1 is null and var2 is null
(,并取其补集(not
(。因此,您需要:
select *
from tab
where not (var1 is null and var2 is null)
或者通过addition
:考虑Oracle的CCD_
select *
from tab
where nvl2(var1,1,0) + nvl2(var2,1,0) > 0
其中,对于null
值返回0
,对于作为加法分量的nvl2()
函数中声明的每列值的non-null
值返回1
。
演示