查当月每天的在职人数

get_D 2018-06-05 10:39:54
部门 第一天在职人数 第二天在职人数 第三天在职人数 。。。。 当月平均每天
行政部 5 5 6 。。
人力部 8 7 9 。。

就例如上面这个格式,当天在职的就是他的入职日期小于等于当天的日期,并且离职日期大于等于当天的日期
这个怎么查出来上面那个格式和数据,大神们
...全文
1752 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2018-06-22
  • 打赏
  • 举报
回复
引用 10 楼 sinat_28984567 的回复:
[quote=引用 9 楼 wwfxgm 的回复:]

这里最后的代码。写的不完整呀。


CSDN限制的……也是醉了[/quote]
现在回答问题字一多,连输入都不成功
二月十六 2018-06-22
  • 打赏
  • 举报
回复
引用 9 楼 wwfxgm 的回复:
这里最后的代码。写的不完整呀。


CSDN限制的……也是醉了
wwfxgm 2018-06-22
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([工号] int,[部门] nvarchar(23),[入职日期] Date,[最后工作日] Date)
Insert #T
select 1,N'行政部','2018/3/2','9999/12/31' union all
select 2,N'行政部','2018/3/3','2018/6/5' union all
select 3,N'行政部','2018/3/4','9999/12/31' union all
select 4,N'行政部','2018/3/5','9999/12/31' union all
select 5,N'行政部','2018/3/6','9999/12/31' union all
select 6,N'行政部','2018/3/7','9999/12/31' union all
select 7,N'行政部','2018/6/4','9999/12/31'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 部门'
SELECT @sql = @sql + ',sum(case when 入职日期<=''' + RTRIM(日期)
+ ''' and 最后工作日>=''' + RTRIM(日期)
+ ''' then 1 else 0 end)[' + CONVERT(VARCHAR(8),日期,112) + '在职人数]'
FROM ( SELECT DISTINCT
DATEADD(DAY, number, CONVERT(DATETIME, '2018-06-01')) AS 日期
FROM master..spt_values
WHERE type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-06-01', DATEADD(MONTH, 1, '20


这里最后的代码。写的不完整呀。
二月十六 2018-06-20
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([工号] int,[部门] nvarchar(23),[入职日期] Date,[最后工作日] Date)
Insert #T
select 1,N'行政部','2018/3/2','9999/12/31' union all
select 2,N'行政部','2018/3/3','2018/6/5' union all
select 3,N'行政部','2018/3/4','9999/12/31' union all
select 4,N'行政部','2018/3/5','9999/12/31' union all
select 5,N'行政部','2018/3/6','9999/12/31' union all
select 6,N'行政部','2018/3/7','9999/12/31' union all
select 7,N'行政部','2018/6/4','9999/12/31'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select 部门'
SELECT @sql = @sql + ',sum(case when 入职日期<=''' + RTRIM(日期)
+ ''' and 最后工作日>=''' + RTRIM(日期)
+ ''' then 1 else 0 end)[' + CONVERT(VARCHAR(8),日期,112) + '在职人数]'
FROM ( SELECT DISTINCT
DATEADD(DAY, number, CONVERT(DATETIME, '2018-06-01')) AS 日期
FROM master..spt_values
WHERE type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-06-01', DATEADD(MONTH, 1, '20
get_D 2018-06-20
  • 打赏
  • 举报
回复
引用 4 楼 superwfei 的回复:
https://bbs.csdn.net/topics/392318989 和这个帖子的问题很类似,不过你的需求是天,他的需求是月,自己改改就好
看不懂,有没有简单一点的。。。
shinger126 2018-06-20
  • 打赏
  • 举报
回复
CREATE TABLE #test(工号 INT,部门 VARCHAR(20),入职日期 DATETIME,最后工作日 DATETIME ) INSERT INTO #test SELECT 1, '行政部', '2018/3/2', '9999/12/31' UNION ALL SELECT 2, '行政部', '2018/3/3', '2018/6/5' UNION ALL SELECT 3, '行政部', '2018/3/4', '9999/12/31' UNION ALL SELECT 4, '行政部', '2018/3/5', '9999/12/31' UNION ALL SELECT 5, '行政部', '2018/3/6', '9999/12/31' UNION ALL SELECT 6, '行政部', '2018/3/7', '9999/12/31' UNION ALL SELECT 7, '行政部', '2018/6/4', '9999/12/31' ;WITH t AS (SELECT DATEADD(DAY,number,'2018-03-01') date FROM master..spt_values WHERE type='p' AND DATEADD(DAY,number,'2018-03-01')<'2018-04-01') SELECT date,部门,COUNT(b.工号) 人数 FROM t LEFT JOIN #test b on t.date BETWEEN b.入职日期 AND b.最后工作日 GROUP BY date,部门 ORDER BY t.date 先生成日期、部门,人数的列表后,再做动态列转行
shinger126 2018-06-20
  • 打赏
  • 举报
回复
引用 5 楼 get_D 的回复:
[quote=引用 4 楼 superwfei 的回复:] https://bbs.csdn.net/topics/392318989 和这个帖子的问题很类似,不过你的需求是天,他的需求是月,自己改改就好
看不懂,有没有简单一点的。。。[/quote] 楼主的难点可能是生成日期列表,然后与职员表进行匹配的问题 这个转换肯定要有一个日期范围条件的,不然不知道要生成的日期列表范围
文盲老顾 2018-06-05
  • 打赏
  • 举报
回复
https://bbs.csdn.net/topics/392318989 和这个帖子的问题很类似,不过你的需求是天,他的需求是月,自己改改就好
get_D 2018-06-05
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
这种问题是动态行列互转问题,你可以先试着百度看看https://blog.csdn.net/sinat_28984567/article/details/79865046
工号 部门 入职日期 最后工作日 1 行政部 2018/3/2 9999/12/31 2 行政部 2018/3/3 2018/6/5 3 行政部 2018/3/4 9999/12/31 4 行政部 2018/3/5 9999/12/31 5 行政部 2018/3/6 9999/12/31 6 行政部 2018/3/7 9999/12/31 7 行政部 2018/6/4 9999/12/31 例如上面那些数据,如果六月3号就是在职6人,六月4号就是在职7个人,六月5号就是在职6个人,因为4号入职一个,5号离职一个
二月十六 2018-06-05
  • 打赏
  • 举报
回复
这种问题是动态行列互转问题,你可以先试着百度看看https://blog.csdn.net/sinat_28984567/article/details/79865046
二月十六 2018-06-05
  • 打赏
  • 举报
回复
上边那个是结果吧?原始数据什么样的?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧