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

SQL:ソーステーブルの列値に基づく列名を使用した動的ビュー

    これは、PIVOT 。 PIVOTを実行するときは、変換する行をコーディングする静的ピボットと、実行時に列のリストを作成する動的ピボットの2つの方法のいずれかを実行できます。

    静的ピボット( SQL Fiddle forDemo を参照してください。 ):

    select id, [user], [engineer], [manu], [OS]
    from 
    (
        select t.id
            , t.[user]
            , p.ticketid
            , p.label
            , p.value
        from tickets t
        inner join properties p
            on t.id = p.ticketid
    ) x
    pivot
    (
        min(value)
        for label in ([engineer], [manu], [OS])
    ) p
    

    または、動的ピボットを使用することもできます( SQL Fiddle forDemo を参照してください。 ):

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(p.label) 
                        from tickets t
                        inner join properties p
                            on t.id = p.ticketid
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT id, [user], ' + @cols + ' from 
                 (
                     select t.id
                            , t.[user]
                            , p.ticketid
                            , p.label
                            , p.value
                        from tickets t
                        inner join properties p
                            on t.id = p.ticketid
                ) x
                pivot 
                (
                    min(value)
                    for label in (' + @cols + ')
                ) p '
    
    execute(@query)
    

    どちらのクエリも同じ結果を返します。




    1. PL / SQL:プロシージャでユーザー入力を促すにはどうすればよいですか?

    2. php-mysqlスクリプトが失敗したときに詳細なエラーレポートを取得する方法は?

    3. CrystalReportsとMicrosoftSQLServer Reporting Services

    4. MySQLでの行から列への変換