首先排班信息表k15
主键 日期 班次名称,星期
a0188,d9999,k1500 ,k1506
人员信息表 a01主键 姓名 工号
a0188,a0101,a0190
怎么查询?下面的数据
日期 1 2 3 4 5 6 7 8 9 10 11
星期 星期六 星期一 星期二 星期三 星期四 星期五 星期六 星期日 星期一 星期二 星期三。。
姓名 白班1 白班1 休息 夜班 夜班 白班1 白班1 休息 夜班 夜班 白班1
上面的日期也是当月的天数,
请各位高手帮帮忙?谢谢了。。
主键 日期 班次名称,星期
a0188,d9999,k1500 ,k1506
人员信息表 a01主键 姓名 工号
a0188,a0101,a0190
怎么查询?下面的数据
日期 1 2 3 4 5 6 7 8 9 10 11
星期 星期六 星期一 星期二 星期三 星期四 星期五 星期六 星期日 星期一 星期二 星期三。。
姓名 白班1 白班1 休息 夜班 夜班 白班1 白班1 休息 夜班 夜班 白班1
上面的日期也是当月的天数,
请各位高手帮帮忙?谢谢了。。
declare @sql varchar(max)select b.a0101,a.d9999,a.k1500,a.k1506
into #tb
from k15 a join a01 b on a.a0188 = b.a0188select @sql = isnull(@sql+'select a0101')
+',max(case when datepart(dd,d9999) = ' + ltrim(d9) + ' then k1506 else '''' end)[' + ltrim(d9) + ']'
from(select distinct datepart(dd,d9999) d9 from #tb)t
select @sql = @sql + ' from #tb group by a0101'
select @sql = @sql + ' union all ' + replace(@sql,'k1506','k1500')
exec(@sql)
瞎猜,试试看。
into #tb
from k15 a join a01 b on a.a0188 = b.a0188select @sql = isnull(@sql+'select a0101')
+',max(case when datepart(dd,d9999) = ' + ltrim(d9) + ' then k1506 else '''' end)[' + ltrim(d9) + ']'
from(select distinct datepart(dd,d9999) d9 from #tb)t
select @sql = @sql + ' from #tb group by a0101'
select @sql = @sql + ' union all ' + replace(@sql,'k1506','k1500')
exec(@sql)
这个语法有问题
主键 姓名 人员编号
a0188 a0101 a0190
数据
65 LW 178k15表主键(a0188+日期) 日期 班次名称 星期
a0188 d9999 k1500 k1506
65 2011-05-01 白班1 星期日
65 2011-05-02 白班1 星期一
65 2011-05-03 夜班 星期二
65 2011-05-04 夜班 星期三
65 2011-05-05 休息 星期四
65 2011-05-06 休息 星期五。。
等等一个月的排班信息结果
日期 1 2 3 4 5 6
星期 星期日 星期一 星期二 星期三 星期四 星期五
姓名 白班1 白班1 夜班 夜班 休息 休息就是这样的结果就行啊。。
select b.a0101,a.d9999,a.k1500,a.k1506
into #tb
from k15 a join a01 b on a.a0188 = b.a0188select @sql = isnull(@sql+'select a0101','')
+',max(case when datepart(dd,d9999) = ' + ltrim(d9) + ' then k1506 else '''' end)[' + ltrim(d9) + ']'
from(select distinct datepart(dd,d9999) d9 from #tb)t
select @sql = @sql + ' from #tb group by a0101'
select @sql = @sql + ' union all ' + replace(@sql,'k1506','k1500')
exec(@sql)
这段代码有什么问题?总是报错
create table a01(a0188 int,a0101 nvarchar(10),a0190 int)
insert into a01 select 65,'LW',178
insert into a01 select 66,'ZP',185
create table k15(a0188 int,d9999 varchar(10),k1500 nvarchar(10),k1506 nvarchar(10))
insert into k15 select 65,'2011-05-01','白班1','星期日'
insert into k15 select 65,'2011-05-02','白班1','星期一'
insert into k15 select 65,'2011-05-03','夜班','星期二'
insert into k15 select 65,'2011-05-04','夜班','星期三'
insert into k15 select 65,'2011-05-05','休息','星期四'
insert into k15 select 65,'2011-05-06','休息','星期五'
insert into k15 select 66,'2011-05-03','白班','星期二'
go
declare @s nvarchar(max)
select a.a0101,b.d9999,b.k1500 into ##1 from a01 a left join k15 b on a.a0188=b.a0188 where left(b.d9999,7)='2011-05'
select @s=isnull(@s+',','')+'['+ d9999 +']' from(
select distinct [d9999] from ##1
)t
exec('select [a0101],'+@s+'from ##1 pivot (max([k1500]) for [d9999] in('+@s+'))b')
/*
a0101 2011-05-01 2011-05-02 2011-05-03 2011-05-04 2011-05-05 2011-05-06
---------- ---------- ---------- ---------- ---------- ---------- ----------
LW 白班1 白班1 夜班 夜班 休息 休息
ZP NULL NULL 白班 NULL NULL NULL(2 行受影响)*/
go
drop table a01,k15,##1
从字符串转换为 datetime 时发生语法错误。
create table a01(a0188 int,a0101 nvarchar(10),a0190 int)
insert into a01 select 65,'LW',178
insert into a01 select 66,'ZP',185
create table k15(a0188 int,d9999 varchar(10),k1500 nvarchar(10),k1506 nvarchar(10))
insert into k15 select 65,'2011-05-01','白班1','星期日'
insert into k15 select 65,'2011-05-02','白班1','星期一'
insert into k15 select 65,'2011-05-03','夜班','星期二'
insert into k15 select 65,'2011-05-04','夜班','星期三'
insert into k15 select 65,'2011-05-05','休息','星期四'
insert into k15 select 65,'2011-05-06','休息','星期五'
insert into k15 select 66,'2011-05-03','白班','星期二'
godeclare @sql varchar(max)select b.a0101,a.d9999,a.k1500,a.k1506
into #tb
from k15 a join a01 b on a.a0188 = b.a0188select @sql = isnull(@sql,'select a0101')
+',max(case when datepart(dd,d9999) = ' + ltrim(d9) + ' then k1506 else '''' end)[' + ltrim(d9) + ']'
from(select distinct datepart(dd,d9999) d9 from #tb)t
select @sql = @sql + ' from #tb group by a0101'
select @sql = @sql + ' union all ' + replace(@sql,'k1506','k1500')
exec(@sql)drop table a01,k15,#tb
/***********a0101 1 2 3 4 5 6
---------- ---------- ---------- ---------- ---------- ---------- ----------
LW 星期日 星期一 星期二 星期三 星期四 星期五
ZP 星期二
LW 白班1 白班1 夜班 夜班 休息 休息
ZP 白班 (4 行受影响)