SQL Server 2017が登場する前は、MySQL GROUP_CONCAT()
に相当するT-SQLはありませんでした。 働き。この関数を使用すると、(通常の結果セットのように)各行を個別の行としてリストするのではなく、結果セットをコンマ区切りのリストとして返すことができます。
SQL Server 2017より前では、結果をカンマ区切りのリストに入れたい場合は、おそらくSTUFF()
の組み合わせを使用して回避策を見つける必要がありました。 、FOR XML
、およびPATH()
。
ただし、T-SQLには現在STRING_AGG()
があります SQL Server 2017から利用できる関数。この関数は、MySQLのGROUP_CONCAT()
とほとんど同じことを行います。 機能(若干の違いはあります)
構文
STRING_AGG()
の構文 関数は次のようになります:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
expression
の場所 はあらゆるタイプの表現です。式はNVARCHAR
に変換されます またはVARCHAR
連結中のタイプ。文字列以外のタイプは、NVARCHAR
に変換されます タイプ。
ここで、separatorはNVARCHAR
の式です。 またはVARCHAR
連結された文字列の区切り文字として使用されるタイプ。リテラルまたは変数にすることができます。
(オプションの)order句は、WITHIN GROUP
で構成されます 続いてORDER BY ASC
またはORDER BY DESC
括弧内。 ASC
結果を昇順で並べ替えます。これがデフォルト値です。 DESC
結果を降順で並べ替えます。
例
STRING_AGG()
の簡単な例を次に示します。 機能:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
結果:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
ご覧のとおり、結果セットはコンマ区切りのリストとして表示されます。これは、2番目の引数がコンマであり、コンマを区切り文字として使用する必要があることを指定しているためです。
これは同じ結果セットですが、STRING_AGG()
がありません 機能:
SELECT Genre AS Result FROM Genres;
結果:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
つまり、通常の結果セットです。
グループ化、null値の処理、結果の順序付けなどのその他の例については、SQLServerでクエリ結果をコンマ区切りリストとして返す方法を参照してください。