Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL транспониране на пълната таблица

За да транспонирате данните в желания от вас резултат, ще трябва да използвате и двата UNPIVOT и PIVOT функции.

UNPIVOT функцията приема A и B колони и преобразува резултатите в редове. След това ще използвате PIVOT функция за трансформиране на day стойности в колони:

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

Вижте SQL Fiddle с демонстрация.

Ако използвате SQL Server 2008+, тогава можете да използвате CROSS APPLY с VALUES за да отмените центрирането на данните. Вашият код ще бъде променен на следното:

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

Вижте SQL Fiddle с демонстрация.

Редактирайте #1, като приложите текущата си заявка към горното решение, ще използвате нещо подобно на това:

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. Импортиране на excel файлове с променливи заглавки

  2. Уроци за поща на база данни

  3. Грешка 'datetime2' при използване на структура на обект в VS 2010 .net 4.0

  4. Как да намерите оптималния уникален идентификатор в таблица в SQL Server:sp_special_columns

  5. Създайте свързан сървър в SQL Server (пример за T-SQL)