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

列名ピボットテーブルとしてのSQL Server行の値?

    これは PIVOT で実行できます 関数。列に変換したい値がわかっている場合は、ハードコーディングすることができず、静的ピボットを使用します:

    select *
    from 
    (
      select dept, emp_id, emp_name, p_date, hours_worked
      from table1
    ) x
    pivot
    (
      max(hours_worked)
      for p_date in ([2012-10-19], [2012-10-20], [2012-10-21])
    ) p
    

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

    値の数が不明な場合は、動的 SQL を使用して PIVOT できます データ:

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' 
                            + QUOTENAME(convert(char(10), p_date, 120)) 
                        from table1
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT dept, emp_id, emp_name,' + @cols + ' from 
                 (
                    select dept, emp_id, emp_name, p_date, hours_worked
                    from table1
                ) x
                pivot 
                (
                    max(hours_worked)
                    for p_date in (' + @cols + ')
                ) p '
    
    execute(@query)
    

    デモによる SQL Fiddle を参照してください。




    1. データベースからの情報を使用したMySQLおよびPHPSelectOption

    2. SQL:副選択として合計を取得するのが非常に遅い

    3. SQL Server IndyPassを使用したMicrosoftAccessの最適化– 5/21/19

    4. データベースファイルのロード時にSQL構文エラーが発生しました(バージョンエラーの可能性がありますか?)