- /*
- author:旋风
- date:2008-9-12 21:21:00
- version:V1.0
- memo:SQL自动生成月份天数列
- */
- --> 测试数据: [T]
- if object_id('[T]') is not null drop table [T]
- create table [T] ([姓名] varchar(4),[时间] datetime,[考勤类型] varchar(4))
- insert into [T]
- select '张三','2008-8-3','出差' union all
- select '张三','2008-8-4','请假' union all
- select '李四','2008-8-5','请假' union all
- select '王五','2008-8-6','出差' union all
- select '王五','2008-8-7','请假' union all
- select '赵六','2008-8-2','请假'
- select * from [T]
- go
- create procedure createmdays
- @month int--月份
- as
- declare @sql varchar(8000),
- --@month int,--月份
- @mcount int,--月天数
- @mdate datetime,--月初始值
- @i int--计数
- begin
- --set @month=8
- set @i=1
- set @mdate=str(year(getdate()))+'-'+ltrim(@month)+'-'+'1'
- select @mcount=datediff(dd,@mdate,dateadd(mm,1,@mdate))
- --print @mcount
- set @sql='select 姓名'
- while @i<=@mcount
- begin
- set @sql=isnull(@sql+',','')+'max(case day(时间) when '+ltrim(@i)+' then [考勤类型] else '''' end) as ['+ltrim(@i)+']'
- set @i=@i+1
- end
- select @sql=@sql+' from T where month(时间)='+ltrim(@month)+' group by 姓名 '
- --print @sql
- exec(@sql)
- end
- go
- exec createmdays 8--执行
- go
- --删除测试
- drop table T
- drop procedure createmdays
- /*
- 姓名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
- 李四 请假
- 王五 出差 请假
- 张三 出差 请假
- 赵六 请假
- */
SQL自动生成月份天数列
最新推荐文章于 2024-04-25 09:07:39 发布