Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Nilai kolom pivot dinamis MSSQL ke header kolom

Masalah dengan kueri Anda saat ini adalah dengan baris:

MAX(SERVER_ID)

Anda ingin menampilkan PROPERTY_CHAR_VAL untuk setiap PROPERTY_NAME alih-alih. SERVER_ID akan menjadi bagian dari hasil akhir sebagai kolom.

Terkadang ketika Anda bekerja dengan PIVOT lebih mudah untuk menulis kode terlebih dahulu dengan nilai-nilai hard-coded yang mirip dengan:

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;

Lihat SQL Fiddle dengan Demo .

Setelah Anda memiliki versi yang memiliki logika yang benar, Anda dapat mengubahnya menjadi SQL dinamis untuk mendapatkan hasilnya. Ini akan membuat string sql yang akan dieksekusi dan akan menyertakan semua nama kolom baru Anda.

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;

Lihat SQL Fiddle dengan Demo . Keduanya akan memberikan hasil:

| 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. Parameter Output Server PHP Sql

  2. Cara Membuat Kunci Asing Komposit di SQL Server (Contoh T-SQL)

  3. Apa cara yang baik untuk memangkas semua karakter spasi putih dari string di T-SQL tanpa UDF dan tanpa CLR?

  4. Cara Memetakan Banyak Partisi ke Satu Filegroup di SQL Server (T-SQL)

  5. Bagaimana mengurutkan agar seperti yang dimasukkan dalam SQL Server?