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

SQL Server 2005 で 1 つのテーブルからデータをピボットする方法

    これは実際には を使用して非常に簡単に実行できます。 PIVOT 関数。他の回答には、それを実行する方法に関連付けられたコードが表示されないため、PIVOT の 2 つの方法を次に示します。 データ。

    1 つ目は、静的ピボットです。 .静的ピボットは、列に変換するデータが事前にわかっている場合です。

    select *
    from 
    (
        select name, id, convert(char(5), dt, 101) dt, jobid, amount
        from test
    ) x
    pivot
    (
        sum(amount)
        for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
    )p
    order by jobid, name
    

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

    2 つ目の方法は、ダイナミック PIVOT を使用する方法です。 列に変換する値を実行時に識別します。

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                        from test
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT name, id, ' + @cols + ', jobid from 
                 (
                    select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                    from test
                ) x
                pivot 
                (
                    sum(amount)
                    for dt in (' + @cols + ')
                ) p 
                order by jobid, name'
    
    execute(@query)
    

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

    どちらも同じ結果になります。ダイナミックは、列に変換する前に値がわからない場合に最適です。




    1. 多対多のテーブルからグループを取得する

    2. OracleデータベースのCLOBに含まれるxmlに属性を追加するにはどうすればよいですか?

    3. SQLServerをAM/PM形式で日時を保存するようにするにはどうすればよいですか?

    4. Mysql:最新のレコードの更新フィールド