2024年のうちにやっておきたいこと、ここで宣言しませんか?

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 <--ここ

よろしくお願いします。

A 回答 (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
;

抽出条件も兼ねたインラインビューとしています。
    • good
    • 0
この回答へのお礼

ありがとうございました。解決しました。

回答頂いたままだと結果は変わりませんでしたが、
次のように修正した所、思い通りの結果が得られ
ました。


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

お礼日時:2006/03/14 19:15

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はトランザクション
ではなく、マスターテーブルなのです。

補足日時:2006/03/14 18:33
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報