sql >> Database >  >> RDS >> Sqlserver

SQL Server-rijwaarden als kolomnamen Draaitabel?

U kunt dit doen met de PIVOT functie. Als u de waarden kent die u in kolommen wilt omzetten, kunt u hard coderen en vervolgens een statische spil gebruiken:

select *
from 
(
  select dept, emp_id, emp_name, p_date, hours_worked
  from table1
) x
pivot
(
  max(hours_worked)
  for p_date in ([2012-10-19], [2012-10-20], [2012-10-21])
) p

Zie SQL Fiddle met demo

Als u een onbekend aantal waarden heeft, kunt u dynamische sql gebruiken om PIVOT de gegevens:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' 
                        + QUOTENAME(convert(char(10), p_date, 120)) 
                    from table1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT dept, emp_id, emp_name,' + @cols + ' from 
             (
                select dept, emp_id, emp_name, p_date, hours_worked
                from table1
            ) x
            pivot 
            (
                max(hours_worked)
                for p_date in (' + @cols + ')
            ) p '

execute(@query)

Zie SQL Fiddle met demo




  1. reguliere expressie voor lijngescheiden verschillende lange woorden

  2. MySQL-fout 150, kan geen tabel maken

  3. Groepsdata in een foreach-lus

  4. Php-pagina met html-formulier erin voer php-code uit voordat het formulier is voltooid