sql >> データベース >  >> RDS >> Sqlserver

GROUP_CONCAT()と同等のSQL Server

    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でクエリ結果をコンマ区切りリストとして返す方法を参照してください。


    1. エラー1045(28000):ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    2. PostgreSQLでのクエリ最適化。 EXPLAINの基本–パート3

    3. 'psql'のパスワードを非対話的に指定するにはどうすればよいですか?

    4. SQLで列を削除する方法