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

SQL-transponer fuld tabel

For at transponere dataene til det ønskede resultat, skal du bruge både UNPIVOT og PIVOT funktioner.

UNPIVOT funktionen tager A og B kolonner og konverterer resultaterne til rækker. Så skal du bruge PIVOT funktion til at transformere day værdier i kolonner:

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

Se SQL Fiddle with Demo.

Hvis du bruger SQL Server 2008+, kan du bruge CROSS APPLY med VALUES for at frigøre dataene. Din kode vil blive ændret til følgende:

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

Se SQL Fiddle with Demo.

Rediger #1, ved at anvende din nuværende forespørgsel i ovenstående løsning, vil du bruge noget, der ligner dette:

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. Tæl tabelrækker

  2. Postgres:tjek om array-feltet indeholder værdi?

  3. Kombiner flere resultater i en underforespørgsel til en enkelt kommasepareret værdi

  4. Vælg ulåst række i Postgresql