- ベストアンサー
COUNTの取得方法(?)について質問があります。
COUNTの取得方法(?)について質問があります。 現在次のSQL文を投げると SELECT ITEM ,COUNT(ITEM) FROM ITEM_MASTER WHERE ITEM IN ('000', '100', '200', '300', '400') GROUP BY ITEM ORDER BY ITEM ; このような結果が返ってきます。 ITEM COUNT(ITEM) ------ ----------- 100 9 200 2 300 1 ITEMの値が000と400の件数は0件なのですが、0件の場合には、 次のように0と表示したい場合はどのようにしたら良いのでしょうか? ITEM COUNT(ITEM) ------ ----------- 000 0 <--ここ 100 9 200 2 300 1 400 0 <--ここ よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
対象データが存在しないモノは抽出のしようがありません。 どこにも存在しないのであれば、便宜上作るしかありません。 selec ITEM,COUNT(*) from ITEM_MASTER, ( select '000' as KEY from dual union all select '100' as KEY from dual union all select '200' as KEY from dual union all select '300' as KEY from dual union all select '400' as KEY from dual ) M where ITEM=M.KEY group by ITEM order by ITEM ; 抽出条件も兼ねたインラインビューとしています。
その他の回答 (1)
- naochancom
- ベストアンサー率61% (41/67)
ITEM_MASTER<--このテーブルはマスタになるのでしょうか? もし、トランザクションであれば、マスタテーブルと結合してデータ取得が可能だと思います。 [ITEM_MASTER] ITEM data 100 aa 100 bb 200 cc [MASTER] ITEM NAME 000 ITEM0 100 ITEM1 200 ITEM2 300 ITEM3 のテーブルが存在しているのであれば、 SELECT A.ITEM ,COUNT(B.ITEM) FROM MASTER A left join ITEM_MASTER B on (A.ITEM = B.ITEM) WHERE A.ITEM IN ('000', '100', '200', '300', '400') GROUP BY A.ITEM ORDER BY A.ITEM こんな感じだったらいけると思いますが、、どうでしょう?
補足
回答ありがとうございます。 残念ながら、というかITEM_MASTERはトランザクション ではなく、マスターテーブルなのです。
お礼
ありがとうございました。解決しました。 回答頂いたままだと結果は変わりませんでしたが、 次のように修正した所、思い通りの結果が得られ ました。 SELECT M.ITEM ,COUNT(I.ITEM) FROM ( SELECT '0000' AS ITEM FROM DUAL UNION ALL SELECT '1000' AS ITEM FROM DUAL UNION ALL SELECT '2000' AS ITEM FROM DUAL UNION ALL SELECT '3000' AS ITEM FROM DUAL UNION ALL SELECT '5000' AS ITEM FROM DUAL ) M LEFT JOIN ITEM_MASTER I ON M.ITEM = I.ITEM GROUP BY M.ITEM ORDER BY M.ITEM