![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
[注文表]
注文番号 注文商品 注文金額
=======================
111 あああ 5500
222 いいい 3000
[注文オプション表]
注文番号 オプション
================
111 P1
111 P2
222 D1
上記のようなテーブルがあります。
これを下記のようにSQLでまとめたいですが可能でしょうか。
もしありましたら、サンプルSQLをご教示いただけませんでしょうか。
[注文一覧]
注文番号 注文商品 注文金額 オプション1 オプション2
======================================================
111 あああ 5500 P1 P2
222 いいい 3000 D1
お手数をお掛けしますが、なにとぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
肝は「注文オプション表」ですよね。
「注文オプション表」を「tb1」で読み替えて
以下SQLを見てください。
uff-n さんが期待する
結果にはさらに副問い合わせを使って注文表と
結合する必要がありますが、まぁなんとか1SQLで書けると
思います。
同一注文番号のデータがあまりにも多い場合は以下SQLは少し苦しいですね。
あと、Oracleに限定したSQLであることも少し不満が残りますが参考にどうぞ。
---検証データ作成----
create table tb1(c1 number,c2 varchar2(10));
insert all
into tb1 (c1,c2) values(111,'aa3')
into tb1 (c1,c2) values(111,'aa2')
into tb1 (c1,c2) values(222,'aa1')
into tb1 (c1,c2) values(333,'aa1')
into tb1 (c1,c2) values(333,'aa2')
into tb1 (c1,c2) values(333,'aa3')
into tb1 (c1,c2) values(444,'aa5')
into tb1 (c1,c2) values(444,'aa5')
select * from dual
;
---縦を横に展開するSQL
select c1,max(c2_1) n01,max(c2_2) n02,max(c2_3) n03,max(c2_4) n04
from
(
select t.c1,
decode(rk,1,c2,null) c2_1,
decode(rk,2,c2,null) c2_2,
decode(rk,3,c2,null) c2_3,
decode(rk,4,c2,null) c2_4
from
(
select c1,c2,row_number() over(partition by c1 order by c2 ) rk from tb1
)t
) group by c1
--結果
C1 N01 N02 N03 N04
--- --- --- --- ---
111 aa2 aa3
222 aa1
333 aa1 aa2 aa3
444 aa5 aa5
どうでしょうか?期待した結果でしたか?
No.2
- 回答日時:
横展開する個数が決まっているなら、以下のようなSQLで横に展開できます。
select 注文番号,max(decode(R,1,オプション)) オプション1,max(decode(R,2,オプション)) オプション2
from
(
select 注文番号,オプション,row_number() over(partition by 注文番号 order by オプション) R
from 注文オプション表
)
group by 注文番号
;
No.1
- 回答日時:
こんな感じではどうでしょうか?
select
注文番号,注文商品,注文金額
,max(case when recnum = 1 then オプション else null end) オプション1
,max(case when recnum = 2 then オプション else null end) オプション2
,max(case when recnum = 3 then オプション else null end) オプション3
--以下、必要なだけ・・
from
(select
注文表.注文番号,注文表.注文商品,注文表.注文金額,注文オプション表.オプション
,row_number() over(partition by 注文表.注文番号 order by 注文オプション表.オプション) recnum
from 注文表
inner join 注文オプション表 on(注文表.注文番号 = 注文オプション表.注文番号))
group by 注文番号,注文商品,注文金額;
列名は動的に設定したい、とかでしたら普通のSQLだけでは難しいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Amazon アマゾン 7 2022/06/11 11:03
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- 楽天市場 先程のにありがとうございます。ご入金の確認できました。 早速出荷の準備を行いますので、ご安心ください 1 2022/12/21 11:07
- 国産車 メーカー(ディーラー)オプションの注文方法 3 2023/01/20 05:50
- その他(ネットショッピング・通販・ECサイト) krsaidサイトで4点購入しました。12月15日ににありがとうございます。ご入金の確認できました。 1 2022/12/21 09:15
- その他(ネットショッピング・通販・ECサイト) moonwalkbabyで注文されて届いた方いますか? 2 2023/04/12 23:31
- その他(ネットショッピング・通販・ECサイト) 垢バンになってしまうのでしょうか? 1 2022/09/17 00:25
- Excel(エクセル) スプレッドシートのハイパーリンクについて 2 2023/03/22 00:47
- Amazon ★このようなメールが本日届きましたがこのメール自体詐欺ではないでしょうか? 5 2022/05/26 06:49
- ネットスーパー 最低注文金額1円からで、送料無料の商品 3 2023/03/26 14:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Order by句でバインド変数を使...
-
Access終了時の最適化が失敗?
-
表の結合について
-
CREATE テーブルでの複数外部...
-
SELECT文で
-
10営業日前の日付を取得したい...
-
同じ表内の比較
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
access 自動採番 年が変わる...
-
Accessで別テーブルの値をフォ...
-
ADO VBA 実行時エラー3021
-
select句副問い合わせ 値の個...
-
Excelで、改行がある場合の条件...
-
SELECTで1件のみ取得するには?
-
select insertで複数テーブルか...
-
使うべきでない文字。
-
OracleのSQL*PLUSで、デー...
-
SELECTの結果で同一行を複数回...
-
SQL文で右から1文字だけ削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
10営業日前の日付を取得したい...
-
Order by句でバインド変数を使...
-
沿線コード
-
同一コード毎に最新の名称を取...
-
ヤマト急便のチェックデジット...
-
SQLに関して
-
【SQL】登録されているかを比較...
-
SELECT文で
-
オラクル 名称をコードに変換
-
ACCESSで、コード基本のお勧め...
-
一度のSQL発行で結果を得るには...
-
SQLの抽出条件の記述の仕方につ...
-
SQLの集約の方法
-
SQLにて縦を横へ展開
-
基本情報技術者の試験について
-
ストアドプロシージャーの引数...
-
SQLで<>を使用するとき、
-
Access2000での複合検索再び
おすすめ情報