排班表序号 年份 月份 日期1 日期2 日期3 日期4
P20110211 2011 1 张三 张三 张三 李四
P20110212 2011 2 张三/李四/王五 李四 赵六 赵六
P20110213 2011 3 钱三 钱三 钱三 钱三
转换到表:
排班表序号 排班日期 姓名
P20110211 2011-1-1 张三
P20110211 2011-1-2 张三
P20110211 2011-1-3 张三
P20110211 2011-1-4 李四
P20110212 2011-2-1 王五
P20110213 2011-2-2 李四
P20110214 2011-2-3 赵六
P20110212 2011-2-1 李四
P20110212 2011-2-1 王五
…. …. …..
谢谢 !!!!!!!!!!
P20110211 2011 1 张三 张三 张三 李四
P20110212 2011 2 张三/李四/王五 李四 赵六 赵六
P20110213 2011 3 钱三 钱三 钱三 钱三
转换到表:
排班表序号 排班日期 姓名
P20110211 2011-1-1 张三
P20110211 2011-1-2 张三
P20110211 2011-1-3 张三
P20110211 2011-1-4 李四
P20110212 2011-2-1 王五
P20110213 2011-2-2 李四
P20110214 2011-2-3 赵六
P20110212 2011-2-1 李四
P20110212 2011-2-1 王五
…. …. …..
谢谢 !!!!!!!!!!
if not object_id('Tempdb..#1') is null
drop table #1
Go
Create table #1([排班表序号] nvarchar(9),[年份] int,[月份] int,[日期1] nvarchar(20),[日期2] nvarchar(20),[日期3] nvarchar(20),[日期4] nvarchar(20))
Insert #1
select N'P20110211',2011,1,N'张三',N'张三',N'张三',N'李四' union all
select N'P20110212',2011,2,N'张三/李四/王五',N'李四',N'赵六',N'赵六' union all
select N'P20110213',2011,3,N'钱三',N'钱三',N'钱三',N'钱三'
Go
;with Tab1
as
(
Select
[排班表序号],
[排班日期]=rtrim([年份])+right(100+[月份],2)+case when ColName='日期1' then '01' when ColName='日期2' then '02' when ColName='日期3' then '03' when ColName='日期4' then '04' end,
[StaffNames]
from #1 as a
unpivot
([StaffNames] for ColName in([日期1],[日期2],[日期3],[日期4]))b
)
,Tab2
as
(
select [排班表序号],[排班日期],[StaffName]=cast(left([StaffNames],charindex('/',[StaffNames]+'/')-1) as nvarchar(4000)),cast(STUFF(StaffNames,1,charindex('/',StaffNames+'/'),'') as nvarchar(1000)) as StaffNames from Tab1
union all
select [排班表序号],[排班日期],[StaffName]=cast(left([StaffNames],charindex('/',[StaffNames]+'/')-1) as nvarchar(4000)),cast(STUFF(StaffNames,1,charindex('/',StaffNames+'/'),'') as nvarchar(1000)) as StaffNames from Tab2 where StaffNames>''
)
select
[排班表序号],[排班日期],[StaffName]
from Tab2 option (MAXRECURSION 0)
/*
排班表序号 排班日期 StaffName
P20110211 20110101 张三
P20110211 20110102 张三
P20110211 20110103 张三
P20110211 20110104 李四
P20110212 20110201 张三
P20110212 20110202 李四
P20110212 20110203 赵六
P20110212 20110204 赵六
P20110213 20110301 钱三
P20110213 20110302 钱三
P20110213 20110303 钱三
P20110213 20110304 钱三
P20110212 20110201 李四
P20110212 20110201 王五
*/
第一个表
排班表序号 年份 月份 日期1 日期2 日期3 日期4 日期5 ......日期31
P20110211 2011 1 张三 张三 张三 李四
P20110212 2011 2 张三/李四/王五 李四 赵六
P20110213 2011 3 钱三 钱三 张三/钱三/王五
记录数不止三条,有上千条. 而且某个日期下还有可能没有安排人的!人员也不限于上面给出的几位.
然后得到第二张表!!谢谢!老师!
期待您的回复