Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डायनामिक पिवट टेबल

यह sql सर्वर में UNPIVOT . दोनों का उपयोग करके किया जा सकता है और फिर एक PIVOT . एक स्थिर संस्करण वह जगह है जहां आप कॉलम को बदलने के लिए जानते हैं:

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

डेमो के साथ SQL Fiddle देखें

एक गतिशील संस्करण निष्पादन पर रिकॉर्ड निर्धारित करेगा:

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)

डेमो के साथ SQL Fiddle देखें




  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 सर्वर @variable में चुनें?

  2. SQL सर्वर (T-SQL) में डेटाबेस मेल प्रोफाइल की सूची लौटाएं

  3. SQL सर्वर में लाखों पंक्तियों के साथ बड़ी तालिका को कैसे अपडेट करें?

  4. SQL में VARCHAR पर CHAR का चयन करने के लिए उपयोग के मामले क्या हैं?

  5. SQL सर्वर में सभी अक्षम विदेशी कुंजी बाधाओं को कैसे वापस करें (T-SQL उदाहरण)