sql >> Database >  >> RDS >> Sqlserver

SQL:Dynamische weergave met kolomnamen op basis van kolomwaarden in brontabel

U kunt dit doen met een PIVOT . Wanneer u de PIVOT doet, kunt u dit op twee manieren doen, met een Static Pivot waarmee u de te transformeren rijen codeert of een Dynamic Pivot die tijdens runtime een lijst met kolommen maakt:

Static Pivot (Zie SQL Fiddle voor 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

Of u kunt een Dynamic Pivot gebruiken (zie SQL Fiddle voor 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)

Beide zoekopdrachten leveren dezelfde resultaten op.




  1. Hoe SQLCipher te implementeren bij gebruik van SQLiteOpenHelper

  2. SQL QUERY Probleem met resultaatrangschikking

  3. Een JDBC ResultSet toewijzen aan een object

  4. Laravel Query Builder WHERE NOT IN