SQL转置全表我需要在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 0我知道PIVOT当只有一列(A)时怎么做,但是当有多列要转置时我无法弄清楚怎么做(A,B,...)要转置的示例代码:select LEFT(datename(dw,datetime),3) as DateWeek, sum(ACalls) as A, Sum(BCalls) as B from DataTablegroup by LEFT(datename(dw,datetime),3)表结构:Column DataTypeDateTime DatetimeACalls intBCalls int任何帮助都感激不尽。
1 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
为了将数据转换为您想要的结果,您需要同时使用UNPIVOT
和PIVOT
函数。
该UNPIVOT
函数接受A
和B
列并将结果转换为行。然后,您将使用该PIVOT
函数将day
值转换为列:
select *from( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv) srcpivot( max(value) for day in (Mon, Tue, Wed, Thu, Fri)) piv
如果您使用的是SQL Server 2008+,则可以使用CROSS APPLY
with VALUES
来取消数据的移动。您的代码将更改为以下内容:
select *from( select day, col, value from yourtable cross apply ( values ('A', A),('B', B) ) c (col, value)) srcpivot( max(value) for day in (Mon, Tue, Wed, Thu, Fri)) piv
编辑#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)) srcpivot( sum(value) for dateweek in (Mon, Tue, Wed, Thu, Fri)) piv
添加回答
举报
0/150
提交
取消