• 締切済み

PostgreSQLでの複数結果のまとめ方

下記の様テーブルよりproduct_idごとに【結果】の様な形として 出力したいと考えております。 【TableA】 order_id|product_id|product_name | quantity 001  product001  商品名1  2 002  product001  商品名1  1 002  product002  商品名2  2 003  product002  商品名2  1 003  product003  商品名3  1 【結果】 product_id|product_name|quantity|order_id product001  商品名1    3     001, 002 product002  商品名2    3     002, 003 product003  商品名3    1     003 SELECT product_id, max(product_name), sum(quantity), order_id FROM TableA GROUP BY product_id, order_id としてみたのですが、 product_id|product_name|quantity|order_id product001  商品名1    3     001 product001  商品名1    1     002 product002  商品名2    2     002 product002  商品名2    1     003 product003  商品名3    1     003 となってしまい、order_idを上記の様にセルにまとめて表示する方法をお教え頂けますと幸いです。 MySQLではGROUP_CONCAT関数を使う事で実現出来たのですが PostgreSQLでの実現方法が分かりかねています。 尚、PostgreSQLのバージョンはPostgreSQL 8.1.23です。 どなたかご教示頂けますと幸いです。

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

db2 "CREATE TABLE TableA (order_id char(3),product_id char(10), product_name char(20), quantity int)" db2 "INSERT INTO TableA VALUES ('001','product001','商品名1',2),('002','product001','商品名1',1),('002','product002','商品名2',2),('003','product002','商品名2',1),('003','product003','商品名3',1)" db2 "SELECT product_id, max(product_name), sum(quantity), substr(xmlserialize(xmlagg(xmltext(concat(', ',order_id))) as varchar(50)),3) FROM TableA GROUP BY product_id" PRODUCT_ID 2 3 4 ---------- -------------------- ----------- -------------------------------------------------- product001 商品名1 3 001, 002 product002 商品名2 3 002, 003 product003 商品名3 1 003 3 レコードが選択されました。 当方、DB2で実行しています。PostgreSQLで使えればいいのですが。

関連するQ&A