SQL转置完整表
发布时间:2020-05-28 18:44:12 所属栏目:MsSql 来源:互联网
导读:我需要在MS SQL中进行以下转置 从: Day A B ---------Mon 1 2Tue 3 4Wed 5 6Thu 7 8Fri 9 0 以下内容: Value Mon Tue Wed Thu Fri --------------------------A 1 3 5 7 9B 2 4 6 8
|
我需要在MS SQL中进行以下转置 从: Day A B --------- Mon 1 2 Tue 3 4 Wed 5 6 Thu 7 8 Fri 9 0 以下内容: Value Mon Tue Wed Thu Fri -------------------------- A 1 3 5 7 9 B 2 4 6 8 0 我知道如何使用PIVOT,当只有一列(A),但我不知道如何做,当有多个列要转置(A,B,…) 要转置的示例代码: select LEFT(datename(dw,datetime),3) as DateWeek,sum(ACalls) as A,Sum(BCalls) as B from DataTable group by LEFT(datename(dw,3) 表结构: Column DataType DateTime Datetime ACalls int BCalls int 任何帮助将不胜感激. 解决方法为了将数据转换成您想要的结果,您将需要同时使用UNPIVOT和
PIVOT功能.
UNPIVOT函数采用A和B列,并将结果转换为行.然后,您将使用PIVOT函数将日期值转换为列: 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,value
from yourtable
cross apply
(
values ('A',A),('B',B)
) c (col,value)
) src
pivot
(
max(value)
for day in (Mon,Fri)
) piv
见SQL Fiddle with Demo. 编辑#1,将您当前的查询应用到上述解决方案中,您将使用类似于此的内容: select *
from
(
select LEFT(datename(dw,value
from DataTable
cross apply
(
values ('A',ACalls),BCalls)
) c (col,value)
) src
pivot
(
sum(value)
for dateweek in (Mon,Fri)
) piv (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
