求助!!!如何下面的列转行?
现在有如下表:
姓名工号2012.10.082012.10.092012.10.102012.10.112012.10.12
张三10233 白班 白班 休息 白班 白班
如何转换成下面的形式:
姓名工号 日期 班次
张三102332012.10.08白班
张三102332012.10.09白班
张三102332012.10.10休息
张三102332012.10.11白班
张三102332012.10.12白班
[最优解释]
--测试数据
if object_id('work') is not null drop table work
create table work(姓名 nvarchar(20),工号 nvarchar(20),[2012.10.08] nvarchar(20),[2012.10.09] nvarchar(20),
[2012.10.10] nvarchar(20),[2012.10.11] nvarchar(20),[2012.10.12] nvarchar(20))
go
insert into work
select '张三','10233','白班','休息','白班','白班','休息' union all
select '李四','10234','休息','休息','白班','白班','白班'
--select * from work
--查看结果
select 姓名,工号,日期,班次 from work
unpivot(班次 for 日期 in ([2012.10.08],[2012.10.09],[2012.10.10],[2012.10.11],[2012.10.12]))t
/*
姓名 工号 日期 班次
-------------------- -------------------- --------------------------------- --------------------
张三 10233 2012.10.08 白班
张三 10233 2012.10.09 休息
张三 10233 2012.10.10 白班
张三 10233 2012.10.11 白班
张三 10233 2012.10.12 休息
李四 10234 2012.10.08 休息
李四 10234 2012.10.09 休息
李四 10234 2012.10.10 白班
李四 10234 2012.10.11 白班
李四 10234 2012.10.12 白班
(10 行受影响)
*/
select 姓名,工号,日期,班次 from TB
unpivot(班次 for 日期 in ('2012.10.08','2012.10.09','2012.10.10','2012.10.11','2012.10.12'))