sql >> データベース >  >> RDS >> Sqlserver

SQLServerの動的ピボットテーブル

    これは、SQLServerで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 with Demo

    を参照してください

    動的バージョンは、実行時にレコードを決定します:

    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 with Demo

    を参照してください


    1. SQL Server Management Studio(SSMS)を使用したデータベース設計の概念パート1

    2. SQL Server 2008 Expressデータベースにすべてのクエリを記録しますか?

    3. Access2022を含むMicrosoftAccessの最新ニュースをチェックしてください!

    4. pgAdminを使用してPostgresqlテーブルデータをエクスポートする