dポイントプレゼントキャンペーン実施中!

ORACLEで以下の情報を抽出したいのですが、キーワードがありません等のエラーが出てうまくいきません。どなたかご教授お願いいたします。

製品テーブル
区分 区分名
A えんぴつ
B 消しゴム
C ボールペン

売上テーブル
売上コード 売上金額
11A11 100
22B22 200
33C33 300
11A12 200

《出力したい結果》
区分 区分名 合計金額
A えんぴつ 200
B 消しゴム 100
C ボールペン 300

〈出力条件〉
売上コードの3文字目から製品区分を特定し、製品区分毎の売上金額を合計する。


WHERE句にSUBSTRING(区分,3,1)を用いて製品区分を特定したいのですが、SQLが組めません。

select S.区分,S.区分名,sum(U.売上金額)
from 製品テーブル S, 売上テーブル U
where case substring(U.売上コード,3,1) between A and Z then substring(U.売上コード,3,1)
else substring(U.売上コード,3,1) between 0 and 9 then ??
order by S.区分
group by S.区分

根本的におかしい所があると思うのですが、恥ずかしながら自分では特定出来ませんでした。
どなたかご教授のほどお願いいたします。

質問者からの補足コメント

  • 後出しで申し訳ありません。
    テーブルの変更(カラム追加等)は不可です。
    カラムを追加出来ればそうしたいのですが、今回は上記条件でお願いいたします。

      補足日時:2017/10/31 11:50

A 回答 (3件)

No.1さんも言っているように売上テーブルに区分を持たせるべきでしょう。


しかし、テーブルの変更が不可なら副問合せを使用しては如何でしょう。

Select S.区分,S.区分名,U.売上合計
from 製品テーブル as S,
(select substr(売上コード,3,1) as 区分, sum(売上金額) as 合計金額
from 売上テーブル group by substr(売上コード,3,1)) as U
where S.区分=U.区分 order by S.区分

元のsqlはwhere句の構文が誤っていると思います…
手元に実行環境が無いため未確認ですが、上記のsqlで実現できるかと…
ご参考まで
    • good
    • 0
この回答へのお礼

補足に記述いたしましたが、後出しで条件を追加する形で申し訳ありませんでした。
細うどん様のおっしゃる通りテーブルの変更が出来ないので、頂いたSQLを参考に副問合せでやってみようと思います。
当方も出先で実行環境が手元に無いため、明日以降再度挑戦します。結果を再度ご報告いたします。
その前に副問合せについて参考書を一読せねば。。
ご回答ありがとうございました。

お礼日時:2017/10/31 12:01

No.2です


Select句間違えていたので訂正します。
U.売上合計 では無く U.合計金額 でした。

申し訳ございません。
    • good
    • 0
この回答へのお礼

ご報告が遅れましたが、いただいたSQLを参考に副問合せを使ったら出来ました!
初歩的な質問でお恥ずかしい限りでしたが、丁寧なご回答をありがとうございました。

お礼日時:2017/11/05 04:35

> 根本的におかしい所



売上コードの一部に製品テーブルの区分が埋め込まれているということがおかしいです
売上テーブルに売上区分 を独立してカラムでもってください
    • good
    • 0
この回答へのお礼

補足に記述いたしましたが、今回はテーブルの変更ができないパターンとして質問させていただきました。後出しで条件を追加する形で申し訳ありません。
早速のご回答ありがとうございました。

お礼日時:2017/10/31 11:53

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

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