これ何て呼びますか

oracleのsqlについて質問です。
TESTというテーブルがあり、その項目には時間と名前と値があります。

[TESTテーブル]
TIME NAME ATAI
--------------------
06:00 A 2
08:00 B 3
05:00 C 1
06:00 C 4
06:00 A 2

select文で現在は以下の条件でspoolしてログ出力させているのですが、
select name,avg(ATAI)
from TEST
where TIME >= 06:00
and TIME < 07:00
and NAME in(A,B,C)
group by NAME;

上記の結果が、
NAME ATAI
--------------
A 2
C 4

となり、NAMEのBが出力しない状態です。
ログ出力させたから、その後でエクセルのマクロで集計をするのですが、毎回Bを手で入力してからマクロを実行してと大変なため、

NAME ATAI
--------------
A 2
B 0
C 4

のように上記のwhereの条件にあってなくてもNAMEを強制的に表示させることは可能でしょうか?

oracleは11g
OSはlinuxです。

どなたかわかる方、いらっしゃいましたらご教授お願い致します。

A 回答 (2件)

NAME自体を正規化していないのでしょうか?



もしそうであれば、発行したSQLにTESTテーブルに対して
(SELECT DISTINCT NAME FROM TEST)をサブクエリで
RIGHT JOINしてみてはいかがでしょうか?
    • good
    • 1

TIMEが06:00より低く、07:00以上の場合は0とすればいいのですか?


これであれば、
・WHERE句のTIMEの判定を両方削除
・SELECTするavg(ATAI)をCASE文で判定し、条件以外であれば0を出力する
・条件内であれば、そのままavg(ATAI)を出力する

でできると思います。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!