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
不知道怎么实现?请高手指教!谢谢!
能解释sql语句的含义最好!!

 

 

--测试环境
declare @t table(zb varchar(10),机器1 int,机器2 int,机器3 int,机器4 int,机器5 int,机器6 int)
insert into @t select '组别1',1,2,3,4,5,6
union all select '组别2',5,9,7,2,1,3
union all select '组别3',9,5,6,4,4,3

SELECT * FROM 
(
SELECT  Employee,zb,Orders
FROM 
   (
SELECT zb, 机器1, 机器2, 机器3, 机器4, 机器5, 机器6
   
FROM @t) p
UNPIVOT
   (Orders 
FOR Employee IN 
      (机器1, 机器2, 机器3, 机器4, 机器5, 机器6)
)
AS unpvt
) T
 PIVOT
(
MAX(ORDERS)
 
for zb in ([组别1],[组别2],[组别3])
)
as pt
--结果
/*
Employee                                                                                                                         组别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           3

(6 行受影响)
*/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值