SQL转置全表
我需要在MS SQL中执行以下转置 发件人: 对下列事项:SQL转置全表,sql,sql-server,pivot,unpivot,Sql,Sql Server,Pivot,Unpivot,我需要在MS SQL中执行以下转置 发件人: 对下列事项: Value Mon Tue Wed Thu Fri -------------------------- A 1 3 5 7 9 B 2 4 6 8 0 select * from ( select day, col, value from yourtable cross apply ( values ('A', A),('B', B) ) c (col
Value Mon Tue Wed Thu Fri
--------------------------
A 1 3 5 7 9
B 2 4 6 8 0
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
我知道当只有一列A时如何使用PIVOT,但当有多列要转置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,datetime),3)
表结构:
Column DataType
DateTime Datetime
ACalls int
BCalls int
任何帮助都将不胜感激。为了将数据转换为所需的结果,您需要同时使用和函数 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 Server 2008+,则可以使用带值的交叉应用来取消填充数据。您的代码将更改为以下内容:
Value Mon Tue Wed Thu Fri
--------------------------
A 1 3 5 7 9
B 2 4 6 8 0
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
看
编辑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
谢谢你的快速回答。我无法为以下查询执行unpivot:选择LEFTdatenamedw、datetime、3作为DateWeek、SUMACalls作为A、SUMBCalls作为B从_online_interval_数据组按LEFTdatenamedw、datetime、3 unpivot=关键字“unpivot”附近的语法不正确我正在使用SQL2008 R2。交叉应用时出现同样的问题->选择LEFTdatenamedw,datetime,3作为DateWeek,SUMACalls作为A,SUMBCalls作为B从数据组中按LEFTdatenamedw,datetime,3交叉应用=关键字“Cross”附近的语法不正确@user2148939我不理解您发布的代码。请用你的表格结构编辑你的原始帖子,然后编辑你正在使用的代码。列“col”似乎是按字母顺序排列的。如何更改降序(如C、B、A)或其他顺序(如A、C、B),但如果需要另一个顺序呢。例如,如果'col'是月份的名称。你不希望他们像4月、8月、12月那样订购,。。。你想要他们像一月,二月,三月,。。。你怎么能维持这张订单?可能是