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

Chọn Giá trị Từ bảng làm Tiêu đề Cột

Bạn đã không chỉ định RDBMS, nếu bạn biết số cột cần chuyển đổi thì bạn có thể mã hóa cố định các giá trị:

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

Về cơ bản, đây là một PIVOT , một số RDBMS sẽ có PIVOT , nếu bạn làm vậy thì bạn có thể sử dụng phần sau, PIVOT có sẵn trong SQL Server, Oracle:

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

Nếu bạn có một số cột không xác định để chuyển đổi, thì bạn có thể sử dụng PIVOT động . Điều này sẽ nhận được danh sách các cột để chuyển đổi tại thời điểm chạy:

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. làm cách nào để cập nhật 100 bản ghi hàng đầu trong máy chủ sql

  2. Thoát tham số lệnh được chuyển tới xp_cmdshell đến dtexec

  3. Truy vấn SQL Server để ẩn dữ liệu cột hàng trùng lặp. Không muốn xóa một hàng trùng lặp

  4. So sánh máy ảo trên đám mây với cơ sở dữ liệu đám mây được quản lý

  5. Các truy vấn không đồng nhất yêu cầu các tùy chọn ANSI_NULLS và ANSI_WARNINGS được đặt cho kết nối. Điều này đảm bảo ngữ nghĩa truy vấn nhất quán