• ベストアンサー

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 <--ここ よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 ; 抽出条件も兼ねたインラインビューとしています。

taru73
質問者

お礼

ありがとうございました。解決しました。 回答頂いたままだと結果は変わりませんでしたが、 次のように修正した所、思い通りの結果が得られ ました。 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

その他の回答 (1)

回答No.1

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 こんな感じだったらいけると思いますが、、どうでしょう?

taru73
質問者

補足

回答ありがとうございます。   残念ながら、というかITEM_MASTERはトランザクション ではなく、マスターテーブルなのです。

関連するQ&A