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

Bảng tổng hợp động trong SQL Server

Điều này có thể được thực hiện trong máy chủ sql bằng cả UNPIVOT và sau đó là PIVOT . Phiên bản tĩnh là nơi bạn biết các cột cần chuyển đổi:

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

xem SQL Fiddle với Demo

Phiên bản động sẽ xác định các bản ghi khi thực thi:

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)

xem SQL Fiddle với 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. Tham gia loại bỏ:Khi máy chủ SQL loại bỏ các bảng không cần thiết

  2. Nhận giá trị trả về từ thủ tục được lưu trữ trong C #

  3. Điều gì KHÔNG phải là toán tử logic trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 121

  4. Làm cách nào để lấy danh sách các bảng trong thủ tục được lưu trữ?

  5. Các cách theo dõi cơ sở dữ liệu đã xóa trong SQL Server