日期:2014-05-17  浏览次数:20465 次

求助!!!如何下面的列转行?
现在有如下表:
姓名 工号 2012.10.08 2012.10.09 2012.10.10 2012.10.11 2012.10.12
张三 10233  白班           白班          休息            白班            白班

如何转换成下面的形式:
姓名 工号    日期        班次

张三 10233 2012.10.08 白班
张三 10233 2012.10.09 白班
张三 10233 2012.10.10 休息
张三 10233 2012.10.11 白班
张三 10233 2012.10.12 白班



------解决方案--------------------
select 姓名,工号,日期,班次
from TB
unpivot(班次 for 日期 in ([2012.10.08],[2012.10.09],[2012.10.10],[2012.10.11],[2012.10.12])
------解决方案--------------------
select 姓名,工号,日期,班次 from TB
unpivot(班次 for 日期 in ('2012.10.08','2012.10.09','2012.10.10','2012.10.11','2012.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                      白班
张三&n