sql >> Databasteknik >  >> RDS >> Sqlserver

Välja värden från en tabell som kolumnrubriker

Du angav inte RDBMS, om du vet antalet kolumner som ska transformeras kan du hårdkoda värdena:

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

Detta är i grunden en PIVOT funktion, kommer vissa RDBMS att ha en PIVOT , om du gör det kan du använda följande, PIVOT är tillgänglig i SQL Server, Oracle:

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

Om du har ett okänt antal kolumner att transformera kan du använda en dynamisk PIVOT . Detta får listan över kolumner som ska transformeras vid körning:

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. Hur lagrar man bilder i en varbinär(max) kolumn?

  2. Hur kan jag definiera villkorliga icke-null-begränsningar på flera kolumner i mySql?

  3. Hur gör jag stora icke-blockerande uppdateringar i PostgreSQL?

  4. Oracle SQL Check Constraint !=annan tabell