Ответ 1
Чтобы перенести данные в нужный результат, вам нужно будет использовать как 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 with Demo.
Если вы используете 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 with Demo.
Измените # 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