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

1つのコンマ区切り値で列の値を取得する方法

    質問にsql-serverとplsqlの両方のタグを付けたので、SQLServerとOracleの両方に回答を提供します。

    SQL Serverでは、FOR XML PATHを使用できます。 複数の行を連結するには:

    select distinct t.[user],
      STUFF((SELECT distinct ', ' + t1.department
             from yourtable t1
             where t.[user] = t1.[user]
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,2,'') department
    from yourtable t;
    

    SQL Fiddle withDemo を参照してください。 。

    Oracle 11g +では、LISTAGGを使用できます。 :

    select "User",
      listagg(department, ',') within group (order by "User") as departments
    from yourtable
    group by "User"
    

    SQL Fiddle withDemo を参照してください。

    Oracle 11gより前は、wm_concatを使用できました。 機能:

    select "User",
      wm_concat(department) departments
    from yourtable
    group by "User"
    


    1. 個別のエントリの最新エントリの選択

    2. postgresを使用したsqlalchemy:列に括弧が付いているテーブルに挿入します

    3. テーブルの検索と順序を結合するDatatablesがcodeigniterでスタックしている

    4. MySQLテーブルに多くの行を挿入して新しいIDを返すにはどうすればよいですか?