sql >> Base de Datos >  >> RDS >> Sqlserver

Tabla completa de transposición de SQL

Para transponer los datos al resultado que desea, deberá usar tanto el UNPIVOT y el PIVOT funciones.

El UNPIVOT la función toma el A y B columnas y convierte los resultados en filas. Luego usará el PIVOT función para transformar el day valores en columnas:

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

Ver SQL Fiddle con demostración.

Si está utilizando SQL Server 2008+, puede usar CROSS APPLY con VALUES para des-pivotar los datos. Su código se cambiaría a lo siguiente:

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

Ver SQL Fiddle con demostración.

Edición n. ° 1, aplicando su consulta actual en la solución anterior, usará algo similar a esto:

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