• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【SQL】取得項目を1レコードに並べるには?)

【SQL】取得項目を1レコードに並べるには?

このQ&Aのポイント
  • テーブルA(会員番号テーブル)とテーブルB(買い物情報テーブル)があります。テーブルBの買い物月ごとの請求金額を1レコードにまとめたいです。
  • テーブルBを買い物月単位に割ってみましたが、実際の買い物月が非常に深くネストされているため、結合が難しいです。
  • テーブルAとテーブルBのINNER JOINを行い、買い物月ごとの請求金額を取得して1レコードにまとめる方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

縦横変換の典型ですね。 サンプルを提示しますので、加工してください。 SELECT 会員番号, 商品番号, '2008年' AS 年度, SUM(CASE WHEN 買い物月 = 200801 THEN NVL(請求金額,0) END) 請求金額01月, SUM(CASE WHEN 買い物月 = 200802 THEN NVL(請求金額,0) END) 請求金額02月, SUM(CASE WHEN 買い物月 = 200803 THEN NVL(請求金額,0) END) 請求金額03月, SUM(CASE WHEN 買い物月 = 200804 THEN NVL(請求金額,0) END) 請求金額04月, SUM(CASE WHEN 買い物月 = 200805 THEN NVL(請求金額,0) END) 請求金額05月, SUM(CASE WHEN 買い物月 = 200806 THEN NVL(請求金額,0) END) 請求金額06月, SUM(CASE WHEN 買い物月 = 200807 THEN NVL(請求金額,0) END) 請求金額07月, SUM(CASE WHEN 買い物月 = 200808 THEN NVL(請求金額,0) END) 請求金額08月, SUM(CASE WHEN 買い物月 = 200809 THEN NVL(請求金額,0) END) 請求金額09月, SUM(CASE WHEN 買い物月 = 200810 THEN NVL(請求金額,0) END) 請求金額10月, SUM(CASE WHEN 買い物月 = 200811 THEN NVL(請求金額,0) END) 請求金額11月, SUM(CASE WHEN 買い物月 = 200812 THEN NVL(請求金額,0) END) 請求金額12月 FROM テーブルB where 買い物月 between 200801 and 200812 GROUP BY 会員番号, 商品番号; ポイント ・CASEで該当するデータを横展開する。 ・Group Byで横展開した値を集計し1列に集約する。 応用  ・各カラムのデータ型にあわせてSQLを変更する。   ※date型、number型、char型。  ・上記は2008年に限定しているので、実際に欲しい形に変更する。   ※年を意識しない作りにするなど。

banshibo
質問者

お礼

回答の通りで出来ました! なるほど、一度斜めに出してgroup byするのですか。。 勉強になりました。 ありがとうございました。

関連するQ&A