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

SQL Server rækkeværdier som kolonnenavne Pivottabel?

Du kan udføre dette med PIVOT fungere. Hvis du kender de værdier, du vil omdanne til kolonner, kan du hårdkode, så brug en statisk pivot:

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

Se SQL Fiddle with Demo

Hvis du har et ukendt antal værdier, så kan du bruge dynamisk sql til at PIVOT dataene:

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)

Se SQL Fiddle with Demo




  1. INDSÆT et reelt tal i en kolonne baseret på andre kolonner GAMLE INDSÆT

  2. Sådan opsætter du DB-koder til formularer

  3. ORA-04068:eksisterende tilstand af pakker er blevet kasseret ORA-04065:ikke udført, ændret eller droppet lagret procedure

  4. Udfyld rullemenuen Vælg fra en databasetabel