sql >> Databáze >  >> RDS >> Sqlserver

Transponování sloupců do řádků pomocí UNPIVOT

YP můžete snadno rozdělit řetězec pomocí LEFT() , RIGHT() , SUBSTRING() , atd. Můj návrh by byl, jak zacházíte s UNPIVOT . Zdá se, že máte mnoho sloupců k UNPIVOT takže můj návrh by mohl být implementace dynamického SQL k provedení tohoto dotazu. Udělali byste to takto:

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)

viz SQL Fiddle s ukázkou



  1. Jak VLOŽIT na základě podmínky?

  2. Pokus o vytvoření statického spustitelného souboru CGO s knihovnami Oracle na Linuxu/Ubuntu

  3. MySQL objednává více směrů pomocí FIND_IN_SET

  4. Vložit více řádků do databáze MySQL z tabulky