Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pełna tabela transpozycji SQL

Aby przetransponować dane do pożądanego wyniku, będziesz musiał użyć zarówno UNPIVOT i PIVOT funkcje.

UNPIVOT funkcja przyjmuje A i B kolumn i konwertuje wyniki na wiersze. Następnie użyjesz PIVOT funkcja do przekształcenia day wartości w kolumnach:

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

Zobacz SQL Fiddle z demonstracją.

Jeśli używasz SQL Server 2008+, możesz użyć CROSS APPLY z VALUES aby odwrócić dane. Twój kod zostanie zmieniony na następujący:

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

Zobacz SQL Fiddle z demonstracją.

Edytuj nr 1, stosując bieżące zapytanie do powyższego rozwiązania, użyjesz czegoś podobnego do tego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proaktywne kontrole kondycji programu SQL Server, część 5:Statystyka oczekiwania

  2. Jak aktualizować i zamawiać za pomocą ms sql

  3. SQL Server - definiowanie kolumny typu XML z kodowaniem UTF-8

  4. Wykonaj sp_msforeachdb w aplikacji Java

  5. Problem z wdrożeniem raportu SSRS 2014