OracleでLISTAGG関数を使ったけど、世界を変えられなかった話・・・

投稿日:2017-05-13

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


はい、休日出勤でした。
そして、休日出勤の結果、以下のことが分かりました(泣

の後日談というか、結局駄目でしたっていう話。

原因は調べ切れてないけど、連結したテーブルの項目が表示できなかったので、最終的に取得後に件数分のループを回して必要な文字列を構成するという手段を取らざるを得なかった。ぐぬぬ・・・

a a1
a a2
a a3
a a4
:

こんな出力を

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

こんな風に表示を出来てて当初問題なかったんですが、実際に必要とする出力結果では、
「a a1」
では無く、
「あ a1」※「あ」は「a」に対応するマスタの名称
とする必要があったわけ。

そのため、前回書いたようにこう書くのではなく・・・

select
seq
,listagg(t_seq.name ,',') within group (order by t_seq.name ) as name
from
t_seq
group by
seq
;
※この例では、「,」を区切り文字にしてます。

こう書く必要があるわけです。

SELECT
seq
,LISTAGG(m_data.name ,',') WITHIN GROUP (ORDER BY m_data.name ) AS name
FROM
t_seq
LEFT JOIN m_data
ON  t_seq.seq = m_data.seq
GROUP BY
seq
;
※この例では、「,」を区切り文字にしてます。

で、このとき、出力結果が正しく表示されなくなったんです。
SQLの使用環境によるかもしれませんが、sqldeveloperで実行しても正しく表示できなかったので今回は使用を見送ることにしました。
実行環境に左右される状況では、ちょっと使えなかった。
ただ、テーブルの連結をしていても、連結したテーブルの項目を使わなければ表示は問題なかったので、原因が分かったら積極的に使って行きたいなと。







-ORACLE
-,


comment

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

関連記事

続) 何度だって引っかかるORACLEのエラー・・・。ORA-01008:バインドされていない変数があります。

この土日は休日出勤でした・・・ そして、昨日・・・新しい現象が発生しました。 日本の中心付近で仕様変更と闘うSE日記日本の中心付近で仕様変更と闘うSE日記http://ht-jp.net/blog/p …

ORACLEでSPOOL処理の高速化を試す

ORACLEでSPOOL処理の高速化を考えてみた 事の発端は、お客様のお怒りでした・・・ なんで、お客さんに最新版のリリース時には、必ずスキーマ間の比較をすることを徹底しろと言われてしまったと。 まぁ …

[Oracle]長文SQLをWITH句を使って、SQLの繰り返しをまとめる

自分、WITH句アレルギーです\(^o^)/ 今でこそ、使うようになりましたが、最初は拒否反応バリバリでした。 だって、WITH句で何ができるのか良く分からなかったからです。 VIEWのように使えるか …

[ORACLE]マテリアライズドビューの一覧を取得する

正直、使わなさ過ぎてマテリアライズドビューって何?って感じではあるけど、たまにフラット出てくるのでメモ。 詳細は、Oracleのリファレンス見てください。 https://docs.oracle.co …

ORACLEでTO_CHARを使用し、カンマ区切りデータを出力する

帳票出力を行うPGで困った。 数値形式のデータのため、カンマ区切りで表示したいんだけど、テンプレートの制約のせいで上手く行かなくて時の解決方法。 帳票のテンプレートとなるファイルのセルは文字列形式。 …


カテゴリー