sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL Pivot/Unpivot (Transponera) kolumnrubriker behövs som datarader

Det finns några förvirrande saker du gör.

För det första kommer du vanligtvis att avpivotera flera kolumner. Just nu avpivoterar du en kolumn och det verkar som om du gör det bara för att byta namn på kolumnen?

För det andra, du aggregerar data två gånger, PIVOT bör kunna hantera aggregeringen med SUM() .

För det tredje är det inte helt klart varför du behöver kolumnrubrikerna som en rad, vad vill du att kolumnrubrikerna ska heta?

Baserat på dina exempeldata bör du bara kunna använda PIVOT-funktionen:

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

Se SQL-fiol med demo . Om du sedan vill ha en rad med kolumnrubrikerna kan du använda 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-fiol med demo




  1. 3 saker att veta om databaser

  2. Vad är en beräknad kolumn i SQL Server?

  3. codeIgniter använd mysql_real_escape_string() istället.databasanslutningsproblem

  4. MySQL skapa databas om den inte finns