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

Table complète de transposition SQL

Afin de transposer les données dans le résultat que vous souhaitez, vous devrez utiliser à la fois le UNPIVOT et le PIVOT fonctions.

Le UNPIVOT la fonction prend le A et B colonnes et convertit les résultats en lignes. Ensuite, vous utiliserez le PIVOT fonction pour transformer le day valeurs en colonnes :

select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv

Voir SQL Fiddle avec démo.

Si vous utilisez SQL Server 2008+, vous pouvez utiliser CROSS APPLY avec VALUES pour ne pas pivoter les données. Votre code serait remplacé par le suivant :

select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', A),('B', B)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv

Voir SQL Fiddle avec démo.

Modifier #1, en appliquant votre requête actuelle dans la solution ci-dessus, vous utiliserez quelque chose de similaire à ceci :

select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv