複数行を1行にまとめるSQLについてです。
対象DBはOracleです。
複数行を1行にまとめるにはLISTAGG関数というものを使用します。
参考までにテスト的なテーブルとデータ。
create table testd ( id char(3) , keydata char(10), ddata char(10) ); INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '111', 'A','100' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '111', 'B','99' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '111', 'C','70' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '222', 'A','80' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '222', 'B','85' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '222', 'C','99' ) ; INSERT INTO testd ( id, keydata ,ddata ) VALUES ( '333', 'A','50' ) ;
データは次のようになります。
では、id毎にkeydataを,区切りで1つの行にまとめる(複数行を1行にまとめる)SQLは以下のようになります。
SELECT id, LISTAGG(KEYDATA, ',') WITHIN GROUP (order by id) "1行にまとめる" FROM testd GROUP BY id
実行結果は次のようになります。