sql >> Database teknologi >  >> RDS >> Sqlserver

Transponering af kolonner til rækker ved hjælp af UNPIVOT

Du kan nemt opdele YP streng ved hjælp af LEFT() , RIGHT() , SUBSTRING() , osv. Mit forslag ville være, hvordan du håndterer din UNPIVOT . Det ser ud til, at du har mange kolonner til UNPIVOT så mit forslag kan være at implementere dynamisk SQL for at udføre denne forespørgsel. Du ville gøre det på denne måde:

declare @colsUnpivot varchar(max),
  @query  AS NVARCHAR(MAX),
  @cols  varchar(max)

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

select @cols = stuff((select ','
                      +quotename(C.name) + ' as ' + replace(C.name, 'Qty', '')
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name like 'Qty%'
         for xml path('')), 1, 1, '')

set @query 
  = 'select rowid, 
          left(YP, 1) YP,
          cast(right(YP, len(YP) - 1) as int) period,
          Val
     from
     (
        select rowid, ' + @cols + '
        from yourtable
     ) x1
     unpivot
     (
        val for YP IN (' + @colsUnpivot + ')
     ) u'

exec(@query)

se SQL Fiddle with Demo



  1. apt-get installation af oracle java 7 holdt op med at virke

  2. Installation og konfiguration af MySQL på Ubuntu 20.04

  3. sql generere unikt tabel/visningsnavn

  4. MySQL vælg 1 række fra indre joinforbindelse