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

Kolom Dinamis Pivot, tanpa Agregasi

Ya, Anda dapat melakukan pivot dinamis. Terkadang lebih mudah untuk mengerjakan PIVOT kueri menggunakan versi statis terlebih dahulu sehingga Anda dapat melihat bagaimana kueri dan hasilnya akan muncul. Kemudian ubah kueri menjadi versi dinamis.

Berikut adalah contoh kueri versi statis vs. dinamis:

Statis (SQL Fiddle ):

select *
from 
(
    select u.userid,
        u.fname,
        u.lname,
        u.mobile,
        r.question,
        r.choice
    from users u
    left join results r
        on u.questionid = r.questionid
        and u.choiceid = r.choiceid
) x
pivot
(
    min(choice)
    for question in([are you], [from])
) p

Dinamis (SQL Fiddle ):

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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
            FROM results c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from 
            (
                select u.userid,
                    u.fname,
                    u.lname,
                    u.mobile,
                    r.question,
                    r.choice
                from users u
                left join results r
                    on u.questionid = r.questionid
                    and u.choiceid = r.choiceid
           ) x
            pivot 
            (
                min(choice)
                for question in (' + @cols + ')
            ) p '


execute(@query)

Jika Anda dapat memberikan detail lebih lanjut tentang struktur tabel Anda saat ini dan kemudian beberapa data sampel. Kami seharusnya dapat membantu Anda membuat versi yang Anda perlukan untuk situasi Anda.

Seperti yang saya katakan, terkadang lebih mudah untuk memulai dengan versi statis, di mana Anda membuat kode keras di kolom yang perlu Anda ubah terlebih dahulu, lalu beralih ke versi dinamis.




  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 Server Tunggu Acara -3

  2. Mendapatkan semua anak dari orang tua menggunakan kueri MSSQL

  3. Kepatuhan GDPR dan SQL Server Anda

  4. Bagaimana cara menyimpan catatan sejarah dalam tabel sejarah di SQL Server

  5. SQL Server AlwaysOn Availability Groups:Instalasi dan konfigurasi, Bagian 2