ホームページ >データベース >mysql チュートリアル >LISTAGG を使用せずに SQL Server でグループ化された文字列集計を実行する方法

LISTAGG を使用せずに SQL Server でグループ化された文字列集計を実行する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 01:48:10811ブラウズ

How to Perform Grouped String Aggregation in SQL Server Without LISTAGG?

SQL Server でのグループ化された文字列集計

SQL Server を使用する場合の一般的なタスクの 1 つは、複数の行から文字列値を 1 つの行に集計することです。 , カンマ区切りの文字列。たとえば、自動車メーカーとモデルを含むテーブルがある場合、自動車モデルを自動車メーカー別にグループ化するデータセットを作成するとよいでしょう。

SQL Server の LISTAGG の代替手段

Oracle では、このタスクは通常、LISTAGG 関数を使用して実行されます。ただし、SQL Server には、同等の LISTAGG が組み込まれていません。代わりに、STUFF 関数と FOR XML PATH 関数を組み合わせて使用​​すると、同じ結果を得ることができます。

次のクエリは、STUFF と FOR XML PATH を使用して SQL Server でグループ化された文字列の集計を実現する方法を示しています。

SELECT
  make.CarMakeID,
  make.CarMake,
  (
    SELECT
      STUFF(
        (
          SELECT
            ',' + model.CarModel
          FROM CarModels
          WHERE
            model.CarMakeID = make.CarMakeID
          FOR XML PATH('')
        ),
        1,
        1,
        ''
      ) AS CarModels
  )
FROM CarMakes AS make;

このクエリでは、サブクエリが FOR XML PATH 関数を使用して、自動車モデルをコンマで区切られた単一の XML 文字列に連結します。次に、STUFF 関数は先頭のカンマを削除し、連結された文字列を CarModels 列として返します。

クエリの出力は次のとおりです。

| CarMakeID | CarMake | CarModels |
|----------|---------|-----------|
| 1         | SuperCars | Zoom, Wow, Awesome |
| 2         | MehCars | Mediocrity, YoureSettling |

この手法は、簡単で効率的な方法を提供します。文字列の連結が複雑な場合や特殊文字が含まれている場合でも、SQL Server でグループ化された文字列の集計を実現します。

以上がLISTAGG を使用せずに SQL Server でグループ化された文字列集計を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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