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

複数の行のデータを 1 つに結合するにはどうすればよいですか?

    PIVOT を使用すると、次のことができます

    SampleData AS ('Team1' を Team として選択、'example@sqldat .com
     ' E メールとして、'A' を GroupsUNION として、'Team1' を Team として選択します。 com
     ' E メールとして、'B' を GroupsUNION として、'Team1' を Team として選択します。 com
     ' E メールとして、'C' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' E メールとして、'A' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' E メールとして、'B' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' as email, 'C' as Groups)SELECT Team, A, B,C FROM (SELECT * FROM SampleData) sourcePIVOT(MAX(email) FOR Groups IN ([A], [B], [C]) )as pvt   

    プロデュース

    チーム A B C----- ---------------- ---------------- ---- ------------Team1 [email protected] [email protected]
     [email protected]
     チーム 2 [email protected]
     [email protected]
     [email protected]
       

    動作中の Data.SE の例 をご覧ください

    PIVOT をサポートしていない DB では、代わりにテーブルに複数の結合を行うことができます。いずれにしても、GBN が指摘したように、集計を使用していないため、そうしたい場合があります。

    SampleData AS ('Team1' を Team として選択、'example@sqldat .com
     ' E メールとして、'A' を GroupsUNION として、'Team1' を Team として選択します。 com
     ' E メールとして、'B' を GroupsUNION として、'Team1' を Team として選択します。 com
     ' E メールとして、'C' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' E メールとして、'A' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' E メールとして、'B' を GroupsUNION として、'Team2' を Team として選択します。 com
     ' as email, 'C' as Groups)SELECT source.Team, A.email, B.email, C.emailFROM (SELECT DISTINCT TEAM From SampleData) source LEFT JOIN SampleData A ON source.Team =A.Team AND A.GROUPS ='A' LEFT JOIN SampleData B ON source.Team =B.Team AND B.GROUPS ='B' LEFT JOIN SampleData C ON source.Team =C.Team AND C.GROUPS ='C'  

    動作中の Data.SE の例 をご覧ください




    1. JDBCを介してPostgresql-DBからバックアップを行う方法は?

    2. MySQLで日付と時刻をフォーマットする方法

    3. JSON_QUERY()SQL Server(T-SQL)の例

    4. 動的な.htaccess禁止の作成に関する問題