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

SQL Server 2008 行から列へ

    データを行から列に変換する方法はいくつかあります。

    SQL Server 2008 を使用しているため、PIVOT 関数を使用できます。

    row_number() を使用することをお勧めします データのピボットを支援する関数。値の数がわかっている場合は、クエリをハードコーディングできます:

    select user, category1, category2, category3, category4
    from
    (
      select [user], category,
        'Category'+cast(row_number() over(partition by [user] 
                                          order by [user]) as varchar(3)) rn
      from yt
    ) d
    pivot
    (
      max(category)
      for rn in (category1, category2, category3, category4)
    ) piv;
     

    SQL Fiddle with Demo を参照してください。 .

    あなたの状況では、列にする必要がある不明な数の値があると述べました。その場合、動的 SQL を使用して、実行するクエリ文字列を生成する必要があります。

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Category'+cast(row_number() over(partition by [user] 
                                                                          order by [user]) as varchar(3))) 
                        from yt
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT [user],' + @cols + ' 
                  from
                  (
                    select [user], category,
                      ''Category''+cast(row_number() over(partition by [user] 
                                                        order by [user]) as varchar(3)) rn
                    from yt
                  ) d
                  pivot 
                  (
                      max(category)
                      for rn in (' + @cols + ')
                  ) p '
    
    execute(@query)
     

    SQL Fiddle with Demo を参照してください。 .どちらも結果を返します:

    <プレ>| USER | CATEGORY1 | CATEGORY2 | CATEGORY3 | CATEGORY4 | ---------------------------------------------------------- | Bruce | Laptop | Beer | (null) | (null) | | Chuck | Cell Phone | (null) | (null) | (null) | | Jack | Shoes | Tie | Glass | (null) | | Peggy | Shoe | Skirt | Bat | Cat |

    1. MYSQLはPHPコードでタイムゾーンを設定しました

    2. JPA / HibernateでネイティブSQLスクリプトを実行するにはどうすればよいですか?

    3. 2つのSELECTクエリを組み合わせる

    4. Mysqlの構文は正しいようです