Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Стойности на редове на SQL Server като имена на колони. Обобщена таблица?

Можете да направите това с 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

Вижте SQL Fiddle с демонстрация

Ако имате неизвестен брой стойности, тогава можете да използвате динамичен sql за PIVOT данните:

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)

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Производителност на SQL сървър TOP CPU заявка -1

  2. Сравнение на производителността на SQL Server CE 4.0

  3. Преобразуване от UniqueIdentifier в BigInt и обратно?

  4. Как идентифицирате последователности от модели на записи в записи, използващи TSQL?

  5. Вмъкнете двойни кавички в SQL изхода