我有一个SQL查询,其中我将sysdate传递给查询问题是当表中没有与sysdate匹配的日期时,即使应用了nvl,它也不会显示零 这是我的查询
select * from molasses
where trunc(trn_dte) = trunc(sysdate)
但它只显示当前日期在表格中时显示数据但是如果在table.please中找不到数据我想显示零,请帮助我在oracle 10 g中执行此操作。因为有时情况就像上面那样,当没有找到数据时我必须显示零
答案 0 :(得分:1)
这样的会工作,但我认为这不是一个好主意:
select nvl(t.a, n.a) as a, nvl(t.b, n.b) as b, ...
from molasses t
right outer join (select 0 as a, 0 as b, ... from dual) n on 1 = 1
答案 1 :(得分:1)
这很奇怪,我不会使用它,它更像是黑客攻击:
SELECT col1, col2, ..., colN --- numeric columns
FROM molasses
WHERE trunc(trn_dte) = trunc(sysdate)
UNION ALL
SELECT 0, 0, ..., 0
FROM dual
WHERE NOT EXISTS
( SELECT *
FROM molasses
WHERE trunc(trn_dte) = trunc(sysdate)
) ;
当表中只有一行并且所有值都为零时,只会想知道应用程序/用户将会理解的内容。
我认为这也会奏效:
SELECT m.col1, m.col2, ..., m.colN --- numeric columns
FROM dual LEFT JOIN molasses m
ON trunc(m.trn_dte) = trunc(sysdate) ;
并显示Null而不是(想要的)0。使用COALESCE()
功能也可以轻松解决这个问题。
答案 2 :(得分:1)
这是一个非常不寻常的问题。当没有数据存在时,为什么查询会返回0?通常由客户端软件/报告生成器在没有数据时显示有意义的内容,而不是查询本身。
答案 3 :(得分:0)
假设您的表有四个数字列,您可以写:
select * from molasses
where trunc(trn_dte) = trunc(sysdate)
union all
select 0, 0, 0, 0 from dual
where ( select count(*) from molasses where trunc(trn_dte) = trunc(sysdate) ) = 0