没有找到行时如何显示0

时间:2012-09-24 09:31:56

标签: sql oracle

我有一个SQL查询,其中我将sysdate传递给查询问题是当表中没有与sysdate匹配的日期时,即使应用了nvl,它也不会显示零  这是我的查询

select * from molasses
where trunc(trn_dte) = trunc(sysdate)

但它只显示当前日期在表格中时显示数据但是如果在table.please中找不到数据我想显示零,请帮助我在oracle 10 g中执行此操作。因为有时情况就像上面那样,当没有找到数据时我必须显示零

4 个答案:

答案 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