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

Tabel Pivot Dinamis di SQL Server

Ini dapat dilakukan di server sql menggunakan UNPIVOT dan kemudian PIVOT . Versi Statis adalah tempat Anda mengetahui kolom yang akan diubah:

select *
from 
(
  select CaseId, EcoYear, val, item
  from yourtable
  unpivot
  (
    val
    for Item in (NetInv, NetOil, NetGas)
  )u
) x
pivot
(
  max(val)
  for ecoyear in ([2006], [2007], [2008], [2009], [2010], [2011],
                 [2012], [2013], [2014], [2015], [2016], [2017],
                 [2018], [2019], [2020])
) p

lihat SQL Fiddle dengan Demo

Versi Dinamis akan menentukan record saat dieksekusi:

DECLARE @colsPivot AS NVARCHAR(MAX),
    @colsUnpivot as NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

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

select @colsUnpivot = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name LIKE 'Net%'
         for xml path('')), 1, 1, '')


set @query 
  = 'select *
      from
      (
        select caseid, ecoyear, val, col
        from yourtable
        unpivot
        (
          val
          for col in ('+ @colsunpivot +')
        ) u
      ) x1
      pivot
      (
        max(val)
        for ecoyear in ('+ @colspivot +')
      ) p'

exec(@query)

lihat SQL Fiddle dengan Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 Trik untuk Memastikan Kinerja Puncak SQL Server

  2. Bagaimana cara membuat tampilan terwujud di SQL Server?

  3. Apakah ada hit kinerja yang parah untuk menggunakan Kunci Asing di SQL Server?

  4. Cara terbaik untuk melakukan logika pernyataan kasus bersarang di SQL Server

  5. Kunci Utama Gabungan vs kolom ID tambahan?