ホームページ >データベース >mysql チュートリアル >SQL Server と Oracle で複数の行を単一のカンマ区切り列に連結するにはどうすればよいですか?

SQL Server と Oracle で複数の行を単一のカンマ区切り列に連結するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-21 06:46:09846ブラウズ

How to Concatenate Multiple Rows into a Single Comma-Delimited Column in SQL Server and Oracle?

複数の行を単一のカンマ区切り列に結合する (SQL Server および Oracle)

このガイドでは、共有フィールド (TicketID など) に基づいて複数の行を統合し、対応する値 (Person など) を単一のカンマ区切り列 (People など) に連結する方法を説明します。 SQL Server と Oracle の両方のソリューションを検討します。

SQL Server ソリューション

SQL Server は、効率的な文字列の連結と挿入のために STUFF 関数を利用します。 次の例はこれを示しています:

<code class="language-sql">SELECT t.TicketID,
       STUFF(
            ISNULL((
                SELECT ', ' + x.Person
                FROM @Tickets x
                WHERE x.TicketID = t.TicketID
                GROUP BY x.Person
                FOR XML PATH (''), TYPE
            ).value('.','VARCHAR(max)'), ''), 1, 2, ''
        ) [No Preceding Comma],
       ISNULL((
            SELECT ', ' + x.Person
            FROM @Tickets x
            WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
            FOR XML PATH (''), TYPE
        ).value('.','VARCHAR(max)'), '') [Preceding Comma If Not Empty]
FROM @Tickets t
GROUP BY t.TicketID</code>

Oracle ソリューション

Oracle は、列値をカスタム区切り文字で連結するために特別に設計された LISTAGG 関数を提供します。 使用方法は次のとおりです:

<code class="language-sql">SELECT TicketID,
       LISTAGG(Person, ',') WITHIN GROUP (ORDER BY Person) AS People
FROM @Tickets
GROUP BY TicketID</code>

どちらの方法でも、連結された値をカンマで区切って、複数の行を単一の列に効果的にマージします。 関数の選択は、データベース システム (SQL Server または Oracle) によって異なります。

以上がSQL Server と Oracle で複数の行を単一のカンマ区切り列に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。