首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

!怎么上面的列转行

2012-12-17 
求助!!!如何下面的列转行?现在有如下表:姓名工号2012.10.082012.10.092012.10.102012.10.112012.10.12张三

求助!!!如何下面的列转行?
现在有如下表:
姓名工号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])
[其他解释]
select 姓名,工号,日期,班次 from TB
unpivot(班次 for 日期 in ('2012.10.08','2012.10.09','2012.10.10','2012.10.11','2012.10.12'))

热点排行