sql server 2005 中的PIVOT和UNPIVOT中的应用

本文介绍了一种使用SQL实现的数据转置方法,通过UNPIVOT和PIVOT操作将宽表格转换为长表格,再从长表格转换回宽表格的新格式。此技巧适用于需要对数据格式进行转换以方便分析或展示的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有一张表(没有现成的表,临时产生)格式如下:
机器1 机器2 机器3 机器4 机器5 机器6
组别1 1 2 3 4 5 6
组别2 5 9 7 2 1 3
组别3 9 5 6 4 4 3


现在想转换成如下格式:


组别1 组别2 组别3
机器1 1 5 9
机器2 2 9 5
机器3 3 7 6
机器4 4 2 4
机器5 5 1 4
机器6 6 3 5

--测试环境
declare@ttable(zbvarchar(10),机器1int,机器2int,机器3int,机器4int,机器5int,机器6int)
insertinto@tselect'组别1',1,2,3,4,5,6
unionallselect'组别2',5,9,7,2,1,3
unionallselect'组别3',9,5,6,4,4,3

SELECT*FROM
(
SELECTEmployee,zb,Orders
FROM
(
SELECTzb,机器1,机器2,机器3,机器4,机器5,机器6
FROM@t)p
UNPIVOT
(Orders
FOREmployeeIN
(机器1,机器2,机器3,机器4,机器5,机器6)
)
ASunpvt
)T
PIVOT
(
MAX(ORDERS)
forzbin([组别1],[组别2],[组别3])
)
aspt
--结果
/**//*
Employee组别1组别2组别3
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
机器1159
机器2295
机器3376
机器4424
机器5514
机器6633

(6行受影响)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值