[注文表]
注文番号 注文商品 注文金額
=======================
111 あああ 5500
222 いいい 3000
[注文オプション表]
注文番号 オプション
================
111 P1
111 P2
222 D1
上記のようなテーブルがあります。
これを下記のようにSQLでまとめたいですが可能でしょうか。
もしありましたら、サンプルSQLをご教示いただけませんでしょうか。
[注文一覧]
注文番号 注文商品 注文金額 オプション1 オプション2
======================================================
111 あああ 5500 P1 P2
222 いいい 3000 D1
お手数をお掛けしますが、なにとぞよろしくお願いいたします。
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だけでは難しいと思います。
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.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
どうでしょうか?期待した結果でしたか?
お探しの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ランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
SQLの実行結果が異なる
-
沿線コード
-
平成20年 春期 基本情報技術者 ...
-
困っています。ORACLE_SQL 複数...
-
SQL 特定のカラムが最大値のレ...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
ADO VBA 実行時エラー3021
-
select insertで複数テーブルか...
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
-
DataGridViewの、選択されてい...
-
レコードが存在しなかった場合
-
MERGE文を単体テーブルに対して...
-
select句副問い合わせ 値の個...
-
キーが同じを複数行を1行にま...
-
GROUP BYを使ったSELECT文の総...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
沿線コード
-
SQLServer 日付が直前のレコー...
-
10営業日前の日付を取得したい...
-
Excelファイルのデータをテーブ...
-
SQLの実行結果が異なる
-
【SQL】またぎデータの検索の仕方
-
SQLに関して
-
SQLにて縦を横へ展開
-
ヤマト急便のチェックデジット...
-
SQL GROUP BY
-
スペシャリストの方! 助けてく...
-
娘の学校から出た暗号解読です...
-
SQLで<>を使用するとき、
-
GROUP BYを行った後に結合した...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
おすすめ情報