最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

动态交叉表-统计每天员工生日数

来源:懂视网 责编:小采 时间:2020-11-09 14:57:37
文档

动态交叉表-统计每天员工生日数

动态交叉表-统计每天员工生日数:(2010-8-27 记录)动态交叉表-统计每天员工生日数: 1.表结构 Emp ( id , empNo,empName,gender,birthday,deptId ) Dept(id,deptNo,deptName) 2.要点: 2.1 每月天数,计算两个月初的日期差即可; 2.2 小计和合计,利用 group by wit
推荐度:
导读动态交叉表-统计每天员工生日数:(2010-8-27 记录)动态交叉表-统计每天员工生日数: 1.表结构 Emp ( id , empNo,empName,gender,birthday,deptId ) Dept(id,deptNo,deptName) 2.要点: 2.1 每月天数,计算两个月初的日期差即可; 2.2 小计和合计,利用 group by wit

(2010-8-27 记录)动态交叉表-统计每天员工生日数: 1.表结构 Emp ( id , empNo,empName,gender,birthday,deptId ) Dept(id,deptNo,deptName) 2.要点: 2.1 每月天数,计算两个月初的日期差即可; 2.2 小计和合计,利用 group by with ROLLUP 2.3 动态显

(2010-8-27 记录)动态交叉表-统计每天员工生日数:
\

1.表结构

Emp ( id , empNo,empName,gender,birthday,deptId )

Dept(id,deptNo,deptName)

2.要点:

2.1 每月天数,计算两个月初的日期差即可;

2.2 小计和合计,利用 group by with ROLLUP

2.3 动态显示 1 号, 2 号, 3 号 …28 号, 29 号 … ,利用动态交叉表实现

3 .代码如下:

/**
 统计某月员工生日
*/

IF EXISTS (select * from sysobjects where id = object_id('sp_count_birthday') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
 DROP PROCEDURE sp_count_birthday
GO

CREATE Procedure sp_count_birthday 
 @P_MONTH NVARCHAR(2) --月份
WITH encryption 
AS
BEGIN 
 BEGIN TRANSACTION T1
 DECLARE @V_DAYS INT --当月天数
 DECLARE @V_FIRST_DAY_M NVARCHAR(10) --当月第一天
 DECLARE @V_YEAR NVARCHAR(4) --当前年份
 DECLARE @V_SQL NVARCHAR(4000) --最后执行的sql
 DECLARE @V_I INT --计数
 DECLARE @V_TOTAL NVARCHAR(10) --合计
 DECLARE @V_SUBTOTAL NVARCHAR(10) --小计
 
 SET @V_TOTAL = N'合计'
 SET @V_SUBTOTAL = N'小计'
 SET @V_YEAR = datepart(yyyy,GETDATE())
 SET @V_FIRST_DAY_M = @V_YEAR + '-' + @P_MONTH + '-' + '01'
 SET @V_DAYS = DATEDIFF(dd,@V_FIRST_DAY_M,DATEADD(mm,1,@V_FIRST_DAY_M)) 
 
 CREATE TABLE #tmp_date(emp_birth datetime)
 
 SET @V_I = 0
 WHILE(@V_I < @V_DAYS)
 BEGIN
 INSERT INTO #tmp_date(emp_birth) values (DATEADD(dd,@V_I,@V_FIRST_DAY_M))
 SET @V_I = @V_I + 1
 END 
 SET @V_SQL = 'SELECT case when(grouping(org_dpt_name) = 1) then N''' + @V_TOTAL + ''' else isNULL(org_dpt_name, '''') end as ''' + N'部门' + ''',
 case when(grouping(org_dpt_name) <> 1 and grouping(emp_sex) = 1) then N'''+@V_SUBTOTAL+''' else isNULL(dbo.fun_get_lang(emp_sex,''pla_lan_001'',''1'') , '''' ) end as ''' + N'性别' + ''','
 select @V_SQL = @V_SQL + 'sum(case when right(CONVERT(NVARCHAR(8),emp_birth,112),4) = ''' + right(CONVERT(NVARCHAR(8),emp_birth,112),4) + ''' then 1 else 0 end) as ''' + 
 cast(datepart(d,emp_birth) as varchar(2)) + N'号' + ''',' from (select emp_birth from #tmp_date) a
 select @V_SQL = left(@V_SQL,len(@V_SQL)-1) + ' from emp_info e,org_dept d where e.emp_dptcd=d.org_dpt_levcd group by org_dpt_name,emp_sex WITH ROLLUP order by org_dpt_name DESC,emp_sex DESC'
 --print @V_SQL
 exec(@V_SQL)
 IF @@ERROR > 0 
 BEGIN
 ROLLBACK TRANSACTION T1
 END 
 ELSE
 BEGIN
 COMMIT TRANSACTION T1
 END
END

GO

--EXEC sp_count_birthday '6'

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

动态交叉表-统计每天员工生日数

动态交叉表-统计每天员工生日数:(2010-8-27 记录)动态交叉表-统计每天员工生日数: 1.表结构 Emp ( id , empNo,empName,gender,birthday,deptId ) Dept(id,deptNo,deptName) 2.要点: 2.1 每月天数,计算两个月初的日期差即可; 2.2 小计和合计,利用 group by wit
推荐度:
标签: 恢复 备份 数据
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top