需要使用nvl函数从表中查询数据

时间:2013-07-09 06:00:35

标签: sql oracle nvl

我有一个有多列的表。比如,列是C1,C2,C3和C4。

C1 contains daytime, 
C2 contains names,
C3 is the numeric values and 
C4 have 2 values repeatedly say a and b.

现在我需要以白天的方式查询数据,返回C3中对应于a.C4的值。如果C3没有a.C4的值,它应该给我C3中b.C4的值。

1 个答案:

答案 0 :(得分:0)

您的数据是否如下所示:

Jan12, Tom, 1, a
Jan12, Tom, 2, b
Jan13, Bob, 3, a
Jan14, Sue, 4, b

我想你说要运行(查询1 ):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='a' and C3 is not null

但是,如果未找到任何记录,则您希望然后运行(查询2 ):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'

如果是您的目标,请考虑第二个查询。要省略任何通过第一个查询返回记录的内容,你可以这样做(注意仅修改第二个查询)(查询2A):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'
   and NOT EXISTS (SELECT * from TBL WHERE C1=<Datetime> and C4='a')

因此,您现在有两个查询,具有互斥结果。您可以简单地将它们联合起来并将它们作为一个运行(最终,组合查询)。

SELECT C3 from TBL WHERE C1=<Datetime> and C4='a' and C3 is not null
UNION ALL
SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'
   and NOT EXISTS (SELECT * from TBL WHERE C1=<Datetime> and C4='a')