Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

En-têtes de colonne T-SQL Pivot/Unpivot (Transpose) nécessaires en tant que lignes de données

Il y a quelques choses déroutantes que vous faites.

Tout d'abord, vous ne pivoterez généralement pas plusieurs colonnes. En ce moment, vous annulez le pivotement d'une colonne et il semble que vous le fassiez simplement pour renommer la colonne ?

Deuxièmement, vous agrégez les données deux fois, le PIVOT devrait pouvoir gérer l'agrégation à l'aide de SUM() .

Troisièmement, la raison pour laquelle vous avez besoin des en-têtes de colonne en tant que ligne n'est pas claire, comment voulez-vous que les en-têtes de colonne s'appellent ?

Sur la base de vos exemples de données, vous devriez pouvoir appliquer simplement la fonction PIVOT :

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

Voir SQL Fiddle avec démo . Ensuite, si vous voulez une ligne avec les en-têtes de colonnes, vous pouvez utiliser un UNION ALL :

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;

Voir SQL Fiddle avec démo