作者oherman (qq)
看板Database
标题Re: [SQL ] 员工每月请假资料统计
时间Mon Apr 11 17:15:19 2016
不好意思,再延深问一下,因为我在查询的时候可能不知道是第几周
比如说3月1日至3月31日,只知道查询区间,查询结果如下:
employe 第N周 第N+1周 第N+2周 第N+3周 第N+4周
==================================================================
,但是r大的查询方式必需要先确定第周数,不知道有没有更smooth的查询方式?
※ 引述《rockchangnew (rock)》之铭言:
: ※ 引述《oherman (qq)》之铭言:
: : 资料库名称:SQL SERVER
: : 资料库版本:: 2012
: : 内容/问题描述:
: : 各位好
: : 我有个员工每月请假资料里面存放的资料如下:
: : employe date(varchar) off_hour(int)
: : =============================================
: : 张三 2016/01/02 8
: : 张三 2016/01/10 8
: : 李四 2016/01/03 4
: : 李四 2016/01/04 2
: : 李四 2016/01/26 8
: : 王五 2016/01/02 2
: : 王五 2016/01/16 1
: : 王五 2016/01/25 8
: : 想要依周历产生如下资料(查询一月份2016/01/01~2016/01/30资料)
: : employe 第一周 第二周 第三周 第四周
: : ==================================================================
: : 张三 8 8 0 0
: : 李四 6 0 0 8
: : 王五 2 0 1 8
: : 我可以不用procedure及function统计出像如上的资料表吗?谢谢!
: 我的请假日期是直接用日期型态,不是用varchar型态
: 因此如果您是用varchar则请记得转型
: select employee
: ,isnull([1],0) as '第一周'
: ,isnull([2],0) as '第二周'
: ,isnull([3],0) as '第三周'
: ,isnull([4],0) as '第四周'
: ,isnull([5],0) as '第五周' from
: (select
: employee
: ,DATEPART(ww,RestDate) as [Week]
: ,sum(off_hour) as [off_hours] from resttb
: group by employee,DATEPART(ww,RestDate)
: ) p
: PIVOT
: (
: sum ([off_hours])
: FOR [Week] IN
: ( [1], [2], [3], [4], [5] )
: ) AS pvt
: order by employee desc;
: 执行结果
: http://imgur.com/NYhhcGl
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.216.67
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1460366120.A.DAB.html
2F:推 rockchangnew: 上面那一篇是我之前回覆别人的,做法大致相同。就是 04/11 22:51
3F:→ rockchangnew: 先找出区间有哪几周,然後组出语法再执行 04/11 22:51