XMLAGG (SQL)
構文
XMLAGG([ ALL | DISTINCT [BY(col-list)] ]
string-expr
[ %FOREACH(col-list) ] [ %AFTERHAVING ])
引数
引数 | 説明 |
---|---|
ALL | オプション — XMLAGG が string-expr のすべての値を結合した文字列を返すように指定します。キーワードが指定されていない場合は、これが既定になります。 |
DISTINCT | オプション — 一意の string-expr 値のみを含む連結文字列を XMLAGG が返すように指定する DISTINCT 節。DISTINCT で BY(col-list) 従属節を指定できます。col-list には 1 つのフィールド、またはコンマ区切りのフィールドのリストを指定できます。 |
string-expr | 文字列として評価する SQL 式。一般的には、これはデータを取得する列の名前です。 |
%FOREACH(col-list) | オプション — 列名、またはコンマで区切られた列名のリスト。%FOREACH の詳細は、"SELECT" を参照してください。 |
%AFTERHAVING | オプション — HAVING 節にある条件を適用します。 |
概要
XMLAGG 集約関数は、string-expr のすべての値を連結した文字列を返します。返り値は VARCHAR データ型です。
-
シンプルな XMLAGG (または XMLAGG ALL) は、選択された行の string-expr のすべての値で構成される連結文字列を含む文字列を返します。string-expr が NULL の行は、無視されます。
以下の 2 つの例は両方とも、Sample.Person テーブルの Home_State 列内にあるすべての値を連結した文字列を 1 つの値として返します。
SELECT XMLAGG(Home_State) AS All_State_Values FROM Sample.Person
SELECT XMLAGG(ALL Home_State) AS ALL_State_Values FROM Sample.Person
この結合文字列には重複値が含まれます。
-
XMLAGG DISTINCT は、選択された行の string-expr に対応するすべての個別 (一意の) 値で構成される連結文字列を返します (XMLAGG(DISTINCT col1))。string-expr が NULL の行は、無視されます。XMLAGG(DISTINCT BY(col2) col1) は、col2 値が個別 (一意) であるレコードのこれらの col1 フィールド値のみが含まれる連結文字列を返します。ただし、個別の col2 値には、個別値として NULL が 1 つ含まれる場合があります。
string-expr が NULL の行は、返り値から省略されます。空でない文字列の値が 1 つ以上返される場合、string-expr が空の文字列 ('') の行は、返り値から省略されます。NULL でない string-expr の値のみが空の文字列 ('') である場合、返り値は 1 つの空の文字列となります。
XMLAGG はデータ・ストリーム・フィールドをサポートしません。string-expr にストリーム・フィールドを指定すると、SQLCODE -37 が返されます。
XML および XMLAGG
XMLAGG の一般的な使用方法の 1 つに、列の各データ・アイテムにタグ付けすることがあります。これは以下の例で示すように、XMLAGG と XMLELEMENT を組み合わせて行います。
SELECT XMLAGG(XMLELEMENT("para",Home_State))
FROM Sample.Person
この結果、以下のような文字列が出力されます。
<para>LA</para><para>MN</para><para>LA</para><para>NH</para><para>ME</para>...
XMLAGG と ORDER BY
XMLAGG 関数は、複数の行のテーブル列の値を 1 つの文字列に連結します。すべての集約フィールドが評価された後に ORDER BY 節がクエリ結果セットに適用されるため、ORDER BY がこの文字列内の値の順序に直接影響することはありません。特定の状況下では、XMLAGG の結果が順番に表示されることがありますが、この順番を信頼すべきではありません。特定の集約結果値内にリストされる値を、明示的に順序付けすることはできません。