OracleでLISTAGG関数を使ったら、世界が変わった話。

投稿日:2017-05-12

11gR2からGROUP_CONCAT(複数行をまとめて1列に)が可能に

http://d.hatena.ne.jp/kkz_tech/20150311/1426048592

これだよこれ。
GROUP CONCAT関数で対応できるみたいなんだけど、でもさ・・・
使用例のSQL見てみたけど、長大なSQLを修正するときに、対応させるのは無理だと判断。
新規で作るならともかくね・・・

ということで、このLISTAGG関数を使うことに。
ちょうど、現状で使用しているOracleのバージョンは11gR2なので使用可能でした。


通常、SQLの検索結果で複数行出力されてしまうものを1列にまとめることが出来ます。

a a1
a a2
a a3
a a4
 :

こんな出力を

a a1,a2,a3,a4..
※この例では、「,」を区切り文字にしてます。

このように。

select
  seq
  ,listagg(t_seq.name ,'<span style="color: #ff0000;">,</span>') within group (order by t_seq.name ) as name
from
  t_seq
group by
  seq
;
※この例では、「,」を区切り文字にしてます。

こんな書き方で出力を1列にまとめることが出来ました。
within区以降は、お約束って感じでツラツラと。
並び順を意識しないのであれば、列名を指定せず、「null」にしてもいい。

注意というか、注意でもないんだけどw
複数行を1列に出力する性質上、GROUP BY が必須となるので、長大なSQLの修正で組み込む場合は、注意が必要かもしれない。
これは個人的な感覚だけど、全項目を漏れなくGROUP BY句にぶち込むのは、SQLが長くなるだけでなく、メンテナンス製が下がるので・・・

なので、今回は最終的に、サブクエリとして元のSQLにJOINして対応しました。

めでたしめでたしw







-ORACLE, PC
-,


  1. […] OracleでLISTAGG関数を使ったら、世界が変わった話。 […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Oracle Database Bronzeの勉強を始めました。

業務でOracleを使ってます。 DBへの接続と簡単なSQLの確認ぐらいだったら、SQLDeveloperとかのツールを使わずにSQLPlusだけで済ませちゃう人も多いのかな? あとは、SQLのバッチ …

no image

Oracleの再受験無料キャンペーンは5月31日まで

【ピアソンVUE専用】Oracle会場試験用受験チケット(電子チケット) 価格:26,720円 (2019/5/19 14:11時点) 感想(15件) 【ピアソンVUE専用】Oracleオンライン試験 …

Firefoxが右上の「×」ボタンで閉じれなくなった。とりあえず、「Alt + F4」で閉じれるよ。

はい。 タイトルのとおり、メインで使用しているブラウザであるFirefoxが、「×」ボタンで閉じれなくなりましたw 最初は、メモリが足りなくなったりしたのかな?と思いつつ、PCの再起動を試してみても、 …

8TBのHDD WD80EFZXを導入して、常時稼働HDD台数を減らす。

WDのRedシリーズのHDDである、WD80EFZXを購入。 4TBが手狭になってきて、HDDを統合するのも含めてハードウェアの入れ替えを進めたかったので。 そもそも、現在稼働中のHDDは、 4TBx …

[ORACLE]ORA-24344:正常に終了しましたが、コンパイル・エラーがあります。

全然、正常に終われてねぇんじゃん?? って思った。 ビューの作成時に発生。 ネットで検索するも、明確な回答は見当たらず・・・ ただ、エラーには違いないので、ビューが正しく作成されていないことになる。 …


カテゴリー