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

T-SQL Pivot/Unpivot (Transpose) kolonneoverskrifter er nødvendige som datarækker

Der er et par forvirrende ting, du laver.

For det første vil du typisk deaktivere flere kolonner. Lige nu er du ved at deaktivere én kolonne, og det ser ud til, at du gør det bare for at omdøbe kolonnen?

For det andet samler du dataene to gange, PIVOT'en burde være i stand til at håndtere aggregeringen ved hjælp af SUM() .

For det tredje er det ikke helt klart, hvorfor du har brug for kolonneoverskrifterne som en række, hvad vil du have, at kolonneoverskrifterne skal hedde?

Baseret på dine eksempeldata skulle du bare kunne anvende PIVOT-funktionen:

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

Se SQL Fiddle with Demo . Så hvis du vil have en række med kolonneoverskrifterne, så kan du bruge en 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;

Se SQL Fiddle with Demo




  1. Gruppér rækker efter årbåndsinterval

  2. Forbinder Ms Access Db til Mysql via Vba

  3. Gruppér rækker ved hjælp af gruppe efter klausul i MySQL

  4. hvordan undgår man, at brugeren kommer ind i login-sessionen, selv efter at have logget ud ved at klikke tilbage?