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

Tabella completa di trasposizione SQL

Per trasporre i dati nel risultato che desideri, dovrai utilizzare entrambi i UNPIVOT e il PIVOT funzioni.

Il UNPIVOT la funzione accetta A e B colonne e converte i risultati in righe. Quindi utilizzerai il PIVOT funzione per trasformare il day valori in colonne:

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

Vedi SQL Fiddle con demo.

Se utilizzi SQL Server 2008+, puoi utilizzare CROSS APPLY con VALUES per annullare il pivot dei dati. Il tuo codice verrebbe modificato come segue:

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

Vedi SQL Fiddle con demo.

Modifica n. 1, applicando la tua query corrente nella soluzione sopra, utilizzerai qualcosa di simile a questo:

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