sql >> Databasteknik >  >> RDS >> Sqlserver

unpivot med dynamiska kolumner plus kolumnnamn

Du kan referera till kolumnnamnet från val for col in del av unpivoten. Col får kolumnnamnet

Exempelfiol

-- Build list of cols we want to unpivot (skip PID & UID)
declare @cols nvarchar(max) 
select @cols = coalesce(@cols+N',', N'') + quotename(c.name) from syscolumns c
inner join sysobjects o on c.id = o.id and o.xtype = 'u'
where o.name = 'MyTable' and c.name not in ('PID', 'UID') order by c.colid

declare @query nvarchar(max)  

select @query = N'
select PID, [UID], Col as ID, Val
from 
    (
    select PID, UID, ' + @cols + '
    from MyTable
    where UID <> 0
    ) as cp
    unpivot
    (
    Val for Col in (' + @cols + ')
    ) as up
'
exec sp_executesql @query 



  1. Fråga med brutet underval bör resultera i fel men returnerar rader

  2. Hur man löser det finns inte i GROUP BY-felet i mysql-frågan

  3. INSERT-satsen stod i konflikt med FOREIGN KEY-begränsningen

  4. MySql ::lagrad procedur rekursiv