- - PR -
集計について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-20 18:10
Oracle10gで集計を行っています。
集計内容は、 2005/7/1〜2005/7/31までの範囲で日付毎の集計を取りたいと思っております。 そこで過去ログを参考にし テストで20050701〜20050703の範囲でSELECT文を結合したところ まったくデータがない場合、なにも表示されませんでした SELECT count(nvl(ID,0)) FROM TABLE_A WHERE Date = 20050701 〜 SELECT count(nvl(ID,0)) FROM TABLE_A WHERE Date = 20050703 どうしたら0件も抽出できるのかご教授ください。 | ||||
|
投稿日時: 2005-07-20 18:20
GROUP BY句でDate列でグループ化するのはダメでしょうか? _________________ # Future Is On Fire ! | ||||
|
投稿日時: 2005-07-20 18:34
説明不足で申し訳ございません
集計結果を2005/7/1〜2005/7/31まで 2005年7月 日付 1 | 2 | 3 | 4 | 5 ・・・ 件数 0 | 1 | 0 | 5 | 1 ・・・ GroupByに日付も加えていたのですが、上記のように0件でもカウントしたかったので UNIONで1日〜31日を結合しました。 何か良い方法はないでしょうか? ご指導のほどよろしくお願いいたします。 | ||||
|
投稿日時: 2005-07-20 19:03
試していませんがこんな感じです?
select ( select count(id) from table_a where date = 20050701 ) count01 , ( select count(id) from table_a where date = 20050702 ) count02 , ( select count(id) from table_a where date = 20050703 ) count03 , <以下略> from dual ; ----------------------------- count関数を使っていて0件の時に出ない・・・って不思議な気がしたのは私だけでしょうか?
で条件マッチするデータが存在しない場合、0が返ると思うんですが・・・。 0をUNIONしたからデータが表示されないってあるんですかね? #私が無知なだけかもしれませんが。 | ||||
|
投稿日時: 2006-09-26 14:53
select sum(decode(date,20050701,1,0)) count01 , sum(decode(date,20050702,1,0)) count02 from table_a | ||||
|
投稿日時: 2006-09-26 16:16
一言で「集計する」といっても。1日ごとのデータの件数(行数)を集計したいのか
ID列値(数値?)を集計したいのか、どっちなんですかね? 前者ならCOUNTだし。 SELECT DATE, COUNT(*) FROM TABLE_A GROUP BY DATE ※COUNT(列名)と書いた場合、列の値がnullだと集計対象から外れるのでCOUNT(*) 後者ならSUMだし。 SELECT DATE, SUM(COALESCE(ID, O)) FROM TABLE_A GROUP BY DATE | ||||
|
投稿日時: 2006-09-26 16:17
行と列を逆にしたければWHEREで絞ってUNIONで連結してね。
(でもこういう"横持ち"ってあんま好みじゃないな) | ||||
|
投稿日時: 2006-09-26 21:29
手持ちのおもちゃ箱から発見!
1.Group byで日単位に集計した結果のInline Viewと連続する日付を取得するInline Viewを外部結合する。 2.NULLの場合はNVL()で0にする。 ってのはどう? 行と列が反転はしていないけど、それはプログラム側でやるってことで。 #all_catalogのデータ数が結構あるので、数年の連続データなら問題なく作れると思う。 |