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

Giá trị cột tổng hợp động MSSQL thành tiêu đề cột

Vấn đề với truy vấn hiện tại của bạn là với dòng:

MAX(SERVER_ID)

Bạn muốn hiển thị PROPERTY_CHAR_VAL cho mỗi PROPERTY_NAME thay vì. SERVER_ID sẽ là một phần của kết quả cuối cùng dưới dạng một cột.

Đôi khi khi bạn đang làm việc với PIVOT, việc viết mã trước tiên dễ dàng hơn với các giá trị được mã hóa cứng tương tự như:

select id, name1, name2, name3, name4
from
(
  select id, property_name, property_value
  from yourtable
) d
pivot
(
  max(property_value)
  for property_name in (name1, name2, name3, name4)
) piv;

Xem SQL Fiddle với Demo .

Khi bạn có một phiên bản có logic chính xác, thì bạn có thể chuyển đổi nó sang SQL động để nhận được kết quả. Thao tác này sẽ tạo một chuỗi sql sẽ được thực thi và nó sẽ bao gồm tất cả các tên cột mới của bạn.

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(PROPERTY_NAME) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT id, ' + @cols + ' 
            from 
            (
              select id, property_name, property_value
              from yourtable
            ) x
            pivot 
            (
                max(property_value)
                for property_name in (' + @cols + ')
            ) p '

execute sp_executesql @query;

Xem SQL Fiddle với Demo . Cả hai sẽ cho một kết quả:

| ID |  NAME1 |  NAME2 |  NAME3 |  NAME4 |  NAME6 |
|----|--------|--------|--------|--------|--------|
|  1 |  value |  value |  value | (null) | (null) |
|  2 | (null) |  value | (null) |  value | (null) |
|  3 | (null) | (null) | (null) | (null) |  value |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có .NET tương đương với newsequentialid () của SQL Server không

  2. Chuyển cột thành hàng bằng UNPIVOT

  3. Mã khung thực thể chậm khi sử dụng Bao gồm () nhiều lần

  4. Sự cố ASP cổ điển khi kết nối với cơ sở dữ liệu SQL Server từ xa

  5. Chạy các truy vấn lớn trong MS SQL nền