SQL2005列转行示例 使用unpivot

感谢网友TheGodOfGods (龙城飞将) 的帮助.

 

if object_id('tbData') is not null

drop table tbData

go

 

create table tbData([员工ID] int, [员工姓名] varchar(10),岗位工资 int,薪级工资 int,津贴 int,补贴 int,会费 int,年份 int,月份 int)

go

 

 insert into tbData select 1,'张三',200,230,300,100,123,2010,3

union all select 1,'张三',200,230,300,100,123,2010,4

union all select 2,'李四',300,340,300,100,120,2010,3

union all select 2,'李四',300,340,300,100,120,2010,4

 

if object_id('tbProjects') is not null

drop table tbProjects

 go

 

create table tbProjects([ID] int, 工资项目名称 varchar(20))

 go

insert into tbProjects select 1,'岗位工资'

union all select 2,'薪级工资'

union all select 3,'津贴'

union all select 4,'补贴'

union all select 5,'会费'

go

 

select [员工ID],p.ID,金额,年份,月份 from tbData t

unpivot(金额 for 工资项目 in ([岗位工资],[薪级工资],[津贴],[补贴],[会费]))k

 join tbProjects p on k.工资项目=p.工资项目名称

 

 /* 员工ID ID 金额 年份 月份 ----------- ----------- ----------- ----------- -----------

1 1 200 2010 3

1 2 230 2010 3

1 3 300 2010 3

1 4 100 2010 3

1 5 123 2010 3

1 1 200 2010 4

1 2 230 2010 4

1 3 300 2010 4

1 4 100 2010 4

1 5 123 2010 4

2 1 300 2010 3

2 2 340 2010 3

2 3 300 2010 3

2 4 100 2010 3

2 5 120 2010 3

2 1 300 2010 4

2 2 340 2010 4

2 3 300 2010 4

2 4 100 2010 4

2 5 120 2010 4

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值