Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

bỏ chia sẻ với các cột động cộng với tên cột

Bạn có thể tham chiếu tên cột từ val for col in một phần của việc bỏ chia sẻ. Col lấy tên cột

Fiddle mẫu

-- 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. Làm thế nào để chuyển đổi varchar thành datetime trong T-SQL?

  2. Làm cách nào để thêm giờ vào ngày hiện tại trong SQL Server?

  3. Nhóm máy chủ SQL theo số ngày tháng mỗi giờ?

  4. Ngoại lệ lưu trữ biệt lập:Không thể xác định danh tính của miền

  5. Thay đổi thứ tự của các cột xuất hiện trong kết quả mà không thay đổi thứ tự đã chọn