Oracleでは、LISTAGG()
関数を使用すると、複数の行のデータを1つの行に結合できます。
区切り文字(コンマなど)を指定するオプションがあります。 LISTAGG()
によって生成された結果を注文することもできます 機能など。
構文
構文は次のようになります:
LISTAGG( [ ALL | DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
[ WITHIN GROUP order_by_clause ] [OVER query_partition_clause]
listagg_overflow_clause
の場所 は:
{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }
例
次のクエリを実行するとします。
SELECT region_name
FROM regions;
結果:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
LISTAGG()
を使用できます これらの結果をコンマ区切りのリストに変換するには:
SELECT LISTAGG(region_name, ', ')
FROM regions;
結果:
LISTAGG(REGION_NAME,',') _________________________________________________ Europe, Americas, Asia, Middle East and Africa
セパレータを変更する
2番目の引数を別の区切り文字に変更できます:
SELECT LISTAGG(region_name, '; ')
FROM regions;
結果:
Europe; Americas; Asia; Middle East and Africa
セパレータを省略
2番目の引数を省略して、各値を区切り文字なしで連結することができます:
SELECT LISTAGG(region_name)
FROM regions;
結果:
EuropeAmericasAsiaMiddle East and Africa
結果を注文する
WITHIN GROUP (ORDER BY...)
を使用できます LISTAGG()
の出力を順序付ける句 機能:
SELECT LISTAGG(region_name, ',') WITHIN GROUP (ORDER BY region_name ASC)
FROM regions;
結果:
Americas,Asia,Europe,Middle East and Africa
グループ化されたクエリでの使用
LISTAGG()
を使用できます グループ化されたクエリ内で機能して、次のような結果を提供します:
SELECT
region_id,
LISTAGG(country_id, ', ') WITHIN GROUP (ORDER BY country_id ASC) AS "Countries"
FROM countries
GROUP BY region_id
ORDER BY region_id;
結果:
REGION_ID Countries ____________ _________________________________ 1 BE, CH, DE, DK, FR, IT, NL, UK 2 AR, BR, CA, MX, US 3 AU, CN, HK, IN, JP, SG 4 EG, IL, KW, NG, ZM, ZW
個別の値のみを返す
DISTINCT
を使用できます 一意の値のみを返す句:
SELECT LISTAGG(DISTINCT region_id, ', ')
FROM regions;
結果:
1, 2, 3, 4
この関数で実行できることの詳細については、Oracleのドキュメントを参照してください。