0

クエリにsysdateを渡すSQLクエリがあります。sysdateと一致する日付がテーブルにない場合、ここにnvlが適用されていても、ゼロは表示されません。これが私のクエリです。

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

ただし、現在の日付がテーブルに存在する場合にのみデータが表示されますが、テーブルにデータが見つからない場合はゼロを表示したいと思います。Oracle10gでこれを行うのを手伝ってください。上記のような状況で、データが見つからない場合はゼロを表示する必要があるためです。

4

4 に答える 4

2

このようなものはうまくいくでしょうが、私はそれがあまり良い考えではないと思います:

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
于 2012-09-24T09:39:56.563 に答える
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)
      ) ;

テーブルに行が1つだけあり、すべての値がゼロの場合、アプリケーション/ユーザーが何を理解するのか疑問に思うだけです。


これもうまくいくと思います:

SELECT m.col1, m.col2, ..., m.colN              --- numeric columns
FROM dual LEFT JOIN molasses m
  ON trunc(m.trn_dte) = trunc(sysdate) ;

(必要な)0の代わりにNullを表示します。このCOALESCE()関数を使用すると、それも簡単に修正できます。

于 2012-09-24T09:41:46.437 に答える
1

これは非常に珍しい質問です。データが存在しないのにクエリが0を返す必要があるのはなぜですか?通常、クエリ自体ではなく、データが存在しないときに意味のあるものを表示するのは、クライアントソフトウェア/レポートジェネレーター次第です。

于 2012-09-24T09:49:52.023 に答える
0

テーブルに4つの数値列があるとすると、次のように記述できます。

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
于 2012-09-24T09:42:03.427 に答える