ホームページ > データベース > Oracle > Oracle で複数の行を 1 つの行に変換する方法

Oracle で複数の行を 1 つの行に変換する方法

WBOY
リリース: 2022-03-07 15:12:46
オリジナル
22457 人が閲覧しました

Oracle では、"order by" 句を指定した listagg 関数を使用して、複数の行を 1 つの行に変換できます。このステートメントは、データを並べ替えて、並べ替えられた結果を結合することができます。構文は "listagg (列名) ,'区切り文字') グループ内 (列名順)」。

Oracle で複数の行を 1 つの行に変換する方法

このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。

oracleで複数行を1行に変換する方法

必要に応じて、取得した組織配下の下位組織を1行のデータにまとめる必要があり、Oracle独自の機能です。 used

listagg (列名、'区切り文字') グループ内 (列名順)

つまり、各グループ内で、LISTAGG は次に従って列を並べ替えます。 order by 句と並べ替え 最終結果は結合されます

私の組織構造はツリー構造であり、次の SQL は現在の部門の下にあるすべてのサブ部門の名前をクエリします。

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
ログイン後にコピー
ログイン後にコピー

注: 上記の SQL では、ツリー構造内のデータがどのレベルにあるかを示す Oracle キーワード LEVEL が使用されています。
上記の SQL では、Oracle ツリー クエリ ステートメント START WITH … CONNECT も使用されています。 BY PRIOR …
クエリがノードのすべての親ノードに対するものである場合、上記の START WITH SQL を
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O に変更する必要があります。 ORGID (PRIOR 以降のフィールドは前の順序と同じではありません)

ORGANIZATION テーブルのデータは次のとおりです

##1000小学校011001 年生 12001101##1102102 クラス11001103103 クラス11001201201Class12001.LEVEL
SELECT ORGNAME,LEVEL FROM ORGANIZATION 
START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID
ログイン後にコピー
ORGID ORGNAME PID
#1000
2 年生 1000
101 クラス 1100
実行結果は以下の通り

組織名レベル小学校11 年生 #2#23 3332.LISTAGG…グループ内…
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
ログイン後にコピー
実行結果は次のとおりです。次のように:
##2 年生
101 クラス
クラス 102
クラス 103
201Class
小学校、1 年生、2 年生、101 クラス、102 クラス、103 クラス、201 クラス

#3. 親ノードの下にあるすべての子ノードを 1 行にまとめます

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
ログイン後にコピー
ログイン後にコピー

実行結果は以下のとおりです。
小学校、1年、2年、101クラス、102クラス、103クラス、201クラス

# 推奨チュートリアル: 「

Oracle Video Tutorial#」 ##"

以上がOracle で複数の行を 1 つの行に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート