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

Избиране на стойности от таблица като заглавки на колони

Не сте указали RDBMS, ако знаете броя на колоните за трансформиране, тогава можете да кодирате твърдо стойностите:

select FileId,
  max(case when property = 'Name' then value end) Name,
  max(case when property = 'Size' then value end) Size,
  max(case when property = 'Type' then value end) Type
from yourtable
group by FileId

Това е основно PIVOT функция, някои RDBMS ще имат PIVOT , ако го направите, можете да използвате следното, PIVOT се предлага в SQL Server, Oracle:

select *
from 
(
  select FileId, Property, Value
  from yourTable
) x
pivot
(
  max(value)
  for property in ([Name], [Size], [Type])
) p

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

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(property) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select FileId, Property, Value
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for Property in (' + @cols + ')
            ) p '

execute(@query)


  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 таблици

  2. Как мога да деактивирам таблицата за актуализиране за всички потребители

  3. Условен SQL ПОРЪЧАЙТЕ ПО ASC/DESC за алфа колони

  4. OPENROWSET не приема променливи за своите аргументи (SQL Server)

  5. Статистика за входа на файл за производителност на SQL Server