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

unpivot с динамични колони плюс имена на колони

Можете да посочите името на колоната от val for col in част от несвързването. Col получава името на колоната

Примерна цигулка

-- 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. 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. Таблица SELECT и UPDATE, така че да няма припокриване на нишки

  3. Използване на PIVOT и JOIN заедно

  4. 3 начина за преброяване на броя на системните таблици в база данни на SQL Server

  5. Разбиране на проблема с мръсното четене със SQL Server