sql >> Database >  >> RDS >> Sqlserver

SQL transponeren volledige tabel

Om de gegevens om te zetten in het gewenste resultaat, moet u zowel de UNPIVOT en de PIVOT functies.

De UNPIVOT functie neemt de A en B kolommen en zet de resultaten om in rijen. Dan gebruik je de PIVOT functie om de day . te transformeren waarden in kolommen:

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

Zie SQL Fiddle met demo.

Als u SQL Server 2008+ gebruikt, kunt u CROSS APPLY . gebruiken met VALUES om de gegevens ongedaan te maken. Uw code wordt als volgt gewijzigd:

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

Zie SQL Fiddle met demo.

Bewerk #1, door uw huidige zoekopdracht toe te passen op de bovenstaande oplossing, zult u iets soortgelijks als dit gebruiken:

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



  1. 5 voordelen om van te genieten wanneer u uw database upgradet

  2. Vergelijking van Oracle MySQL, Percona Server en MariaDB

  3. Vergelijkbare UTF-8-tekenreeksen voor veld voor automatisch aanvullen

  4. De tweede rij van een tabel selecteren met rownum