
[注文表]
注文番号 注文商品 注文金額
=======================
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ランキング
-
同じ表内の比較
-
沿線コード
-
CREATE テーブルでの複数外部...
-
一度に連結したデータをSELECT...
-
SQL文の記述について
-
WHERE句の制限の有無について
-
【SQL】またぎデータの検索の仕方
-
SQLの実行結果が異なる
-
Access終了時の最適化が失敗?
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
iserease のDB2 UDBに対してODB...
-
Accessで別テーブルの値をフォ...
-
access2003で学籍番号から生徒...
-
OracleのSQL*PLUSで、デー...
-
DataGridViewの、選択されてい...
-
クライアントからのDBアクセス
-
Date型にNULLをセットしたい V...
-
MERGE文を単体テーブルに対して...
-
実績累計の求め方と意味を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
沿線コード
-
SQLの実行結果が異なる
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
【SQL】登録されているかを比較...
-
ヤマト急便のチェックデジット...
-
困っています。ORACLE_SQL 複数...
-
SQLの質問です。
-
SQLにて縦を横へ展開
-
SQLの書き方
-
10営業日前の日付を取得したい...
-
平成20年 春期 基本情報技術者 ...
-
SQLについて
-
SQLの集約の方法
-
同一コード毎に最新の名称を取...
-
Oracleビュー:同じ意味で異な...
-
オラクル 名称をコードに変換
-
SQL 特定のカラムが最大値のレ...
-
SQLについて
おすすめ情報