sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Dynamisk vy med kolumnnamn baserat på kolumnvärden i källtabellen

Du kan utföra detta med en PIVOT . När du gör PIVOT kan du göra det på ett av två sätt, med en statisk pivot som du kodar raderna som ska transformeras eller en dynamisk pivot som skapar listan med kolumner vid körning:

Statisk pivot (Se SQL Fiddle for Demo ):

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

Eller så kan du använda en Dynamic Pivot (Se SQL Fiddle for Demo ):

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)

Båda frågorna ger samma resultat.




  1. Kan inte validera, med novalidate-alternativet

  2. Hur man importerar en DBF-fil i SQL Server

  3. Ställ in PDO för att skapa undantag som standard

  4. Hur DATE_ADD() fungerar i MariaDB