Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybieranie wartości z tabeli jako nagłówków kolumn

Nie określiłeś RDBMS, jeśli znasz liczbę kolumn do przekształcenia, możesz na stałe zakodować wartości:

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

To jest w zasadzie PIVOT funkcja, niektóre RDBMS będą miały PIVOT , jeśli to zrobisz, możesz użyć następującego, PIVOT jest dostępny w SQL Server, Oracle:

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

Jeśli masz nieznaną liczbę kolumn do przekształcenia, możesz użyć dynamicznego PIVOT . Pobiera to listę kolumn do przekształcenia w czasie wykonywania:

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. Czy istnieje sposób na uproszczenie porównania NULL 2 wartości?

  2. Błąd w T-Sql w użyciu kursora

  3. Zapętlenie w wyzwalaczu?

  4. jak wyświetlić cały raport na jednej stronie za pomocą Konstruktora raportów?

  5. Właściwość ConnectionString nie została zainicjowana błąd w VB.NET