sql >> Database >  >> RDS >> Sqlserver

T-SQL Pivot/Unpivot (transponeren) kolomkoppen nodig als gegevensrijen

Er zijn een paar verwarrende dingen die je doet.

Ten eerste maakt u meestal meerdere kolommen ongedaan. Op dit moment maakt u één kolom ongedaan en het lijkt erop dat u dit alleen doet om de kolom te hernoemen?

Ten tweede aggregeert u de gegevens twee keer, de PIVOT zou de aggregatie moeten kunnen verwerken met behulp van SUM() .

Ten derde is het niet precies duidelijk waarom je de kolomkoppen als rij nodig hebt, hoe wil je dat de kolomkoppen heten?

Op basis van uw voorbeeldgegevens zou u de PIVOT-functie gewoon moeten kunnen toepassen:

select 'TotalRecords' TotalRecords, 
  [2012],
  [2013],
  [All]
from tbleirstatisticsoverviewsummary
pivot
(
  sum(totalrecords)
  for FiscalYear IN ([2012],[2013],[ALL])
) p;

Zie SQL Fiddle met demo . Als u dan een rij wilt met de kolomkoppen, dan kunt u een UNION ALL gebruiken:

select 'colname' col1, 
  2012 col2, 
  2013 col3, 
  'All' col4
union all
select 'TotalRecords' TotalRecords, 
  [2012],
  [2013],
  [All] = cast([all] as varchar(10))
from tbleirstatisticsoverviewsummary
pivot
(
  sum(totalrecords)
  for FiscalYear IN ([2012],[2013],[ALL])
) p;

Zie SQL Fiddle met demo




  1. Verwijderen met LEFT JOIN

  2. Oracle:ORA-12154:TNS-probleem:Excel 64-bit/Windows 10 64-bit

  3. Vraagtabel met een ampersand in de naam

  4. Eclipse/Hibernate tools-fout:archiefklaspad-invoer bestaat niet