SQL自动生成月份天数列

  1. /*
  2. author:旋风
  3. date:2008-9-12 21:21:00
  4. version:V1.0
  5. memo:SQL自动生成月份天数列
  6. */
  7. --> 测试数据: [T]
  8. if object_id('[T]'is not null drop table [T]
  9. create table [T] ([姓名] varchar(4),[时间] datetime,[考勤类型] varchar(4))
  10. insert into [T]
  11. select '张三','2008-8-3','出差' union all
  12. select '张三','2008-8-4','请假' union all
  13. select '李四','2008-8-5','请假' union all
  14. select '王五','2008-8-6','出差' union all
  15. select '王五','2008-8-7','请假' union all
  16. select '赵六','2008-8-2','请假'
  17. select * from [T]
  18. go
  19. create procedure createmdays
  20. @month  int--月份
  21. as
  22. declare @sql varchar(8000),
  23. --@month  int,--月份
  24. @mcount int,--月天数
  25. @mdate datetime,--月初始值
  26. @i int--计数
  27. begin
  28. --set @month=8
  29. set @i=1
  30. set @mdate=str(year(getdate()))+'-'+ltrim(@month)+'-'+'1'
  31. select @mcount=datediff(dd,@mdate,dateadd(mm,1,@mdate))
  32. --print @mcount
  33. set @sql='select 姓名'
  34. while @i<=@mcount
  35. begin
  36. set @sql=isnull(@sql+',','')+'max(case day(时间)  when '+ltrim(@i)+' then [考勤类型] else '''' end) as ['+ltrim(@i)+']'
  37. set @i=@i+1
  38. end
  39. select @sql=@sql+' from T where month(时间)='+ltrim(@month)+' group by 姓名 '
  40. --print @sql
  41. exec(@sql)
  42. end 
  43. go
  44. exec createmdays 8--执行
  45. go
  46. --删除测试
  47. drop table T
  48. drop procedure createmdays
  49. /*
  50. 姓名   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
  51. ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
  52. 李四                       请假                                                                                                                                
  53. 王五                            出差   请假                                                                                                                      
  54. 张三             出差   请假                                                                                                                                     
  55. 赵六        请假                     
  56. */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值