sql >> Database teknologi >  >> RDS >> Sqlserver

SQL:Dynamisk visning med kolonnenavne baseret på kolonneværdier i kildetabellen

Du kan udføre dette med en PIVOT . Når du laver PIVOT, kan du gøre det på en af ​​to måder, med en statisk pivot, som du vil kode rækkerne til at transformere eller en dynamisk pivot, som vil oprette listen over kolonner ved kørsel:

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 du kan bruge 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)

Begge forespørgsler vil returnere de samme resultater.




  1. mysql_real_escape_string og array_map returnerer tomme strenge?

  2. Optimering af et lagret funktionskald i SELECT- og WHERE-sætninger

  3. Fremskynder rækkeoptællingen i MySQL

  4. Heroku Rails 4 kunne ikke oprette forbindelse til serveren:forbindelsen blev afvist