SQLでTABLE_A(ORACLEのテーブル)からTABLE_Bを作成することは可能でしょうか?可能であれば、どのようなSQL文を作成すればいいか、教えていただけないでしょうか?

SQLでTABLE_A(ORACLEのテーブル)からTABLE_Bを作成することは可能でしょうか?可能であれば、どのようなSQL文を作成すればいいか、教えていただけないでしょうか? TABLE_Bの内容 ・購入者が同じ購入日に購入した品目(購入品)を横並びにしたいです。 ・購入者が同じ購入日に購入した品目は2つまで ・購入時刻が早いほうを左側 ・購入者が同じ購入日時に2つ以上、購入することはない前提

画像

SQL Server6閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

CREATE TABLE TABLE_B AS SELECT T1.購入者,T1.購入日,T1.購入品,T2.購入日 AS 購入日2 ,T2.購入品 AS 購入品2 FROM (SELECT 購入者,購入日,購入品, ROW_NUMBER() OVER(PARTITION BY 購入者 ORDER BY 購入日) AS N FROM TABLE_A) T1 LEFT OUTER JOIN (SELECT 購入者,購入日,購入品, ROW_NUMBER() OVER(PARTITION BY 購入者 ORDER BY 購入日) AS N FROM TABLE_A) T2 ON T1.購入者=T2.購入者 AND T2.N=2 WHERE T1.N=1 です。

ThanksImg質問者からのお礼コメント

回答ありがとうございました。。。

お礼日時:8/16 18:53

その他の回答(1件)

0

先に確認しておきたいことが3点あります。 (その1)データベース製品について 知恵袋のカテゴリがSQL Server ですが、データベースはORACLEですね。 (その2)TABLE_B の項目について TABLE_Bの仕様から考えると、「購入日時」の項目とは別に「購入日」があってもいいように思えますが、不要ということですね。 (その3)TABLE_B はテーブルとして定義する必要があるか TABLE_B をテーブルとして生成してしまうと、以降は、TABLE_Aとは別物としてメンテナンスが必要になります。 もしも、「普段はTABLE_Aをメンテナンスしていて、TABLE_Bの形式で随時表示できればいい」 ということであれば、TABLE_Bはテーブルにしない方が便利です。 一応、ここではテーブルとして生成するものとします。 CREATE TABLE TABLE_B (購入者, 購入日時1, 購入品1, 購入日時2, 購入品2) AS SELECT R1.購入者, R1.購入日時, R1.購入品, R2.購入日時, R2.購入品 FROM ( SELECT 購入者, 購入日,購入日時, 購入品 FROM ( SELECT 購入者, TO_CHAR(購入日時,'YYYYMMDD') 購入日 ,購入日時, 購入品 ,ROW_NUMBER() OVER (PARTITION BY 購入者, TO_CHAR(購入日時,'YYYYMMDD') ORDER BY 購入日時) RNUM FROM TABLE_A ) R WHERE R.RNUM=1 ) R1 LEFT JOIN ( SELECT 購入者, 購入日,購入日時, 購入品 FROM (SELECT 購入者, TO_CHAR(購入日時,'YYYYMMDD') 購入日 , 購入日時, 購入品 ,ROW_NUMBER() OVER (PARTITION BY 購入者, TO_CHAR(購入日時,'YYYYMMDD') ORDER BY 購入日時) AS RNUM FROM TABLE_A ) RR WHERE RR.RNUM=2 ) R2 ON R1.購入者=R2.購入者 AND R1.購入日=R2.購入日