日期:2014-05-17  浏览次数:20379 次

几个问题感觉自己写的太复杂求高手指点下,问题请看下面,谢谢!求高手,求拯救
在几年的数据中查询查询某月员工的入、离职对照表怎么查,样式如下:

类型 在职人数 入职人数 入职比率 离职人数 离职比率

以类型分组
要查的某月以参数的形式限制 如:@YYDD=‘201201 '  

dbo.PerEmployee 表名

EmpStateName 类型 
InCumbency =1 时在职 =0 时不在职
ComeDate 入职日期
LeaverDate 离职日期  
要考虑当月某类型在职人数为0的类型
无数据库!!!

SQL code
DECLARE @YYDD Varchar(6)
SET @YYDD='201201'
Select EmpStateName, SUM(Case When InCumbency=1  Then 1 Else 0 End) ZaiZhiCount  --在职人数没限制月份
                   , SUM(Case When CONVERT(Varchar(6), ComeDate, 112) = @YYDD  Then 1 Else 0 End) RuZhiCount  --入职人数
                   , CONVERT(Varchar(6),(CASE WHEN  SUM(Case When CONVERT(Varchar(6), ComeDate, 112) = @YYDD Then 1 Else 0 End)=0 
                                                    THEN 0 
                                                    ELSE (CONVERT(Varchar(6),SUM(Case When CONVERT(Varchar(6), ComeDate, 112) = @YYDD   Then 1 Else 0 End)
                                         *10000/(SUM(Case When InCumbency=1 Then 1 Else 0 End)*100))) END))+'%' RuZhiRate --入职比例
                   , SUM(Case When CONVERT(Varchar(6), LeaveDate, 112) = @YYDD  Then 1 Else 0 End) LiZhiCount --离职人数
                   , CONVERT(Varchar(6),(CASE WHEN SUM(Case When CONVERT(Varchar(6), LeaveDate, 112) = @YYDD 
                                                    And InCumbency=0 Then 1 Else 0 End)=0 
                                                   THEN 0 
                                                   ELSE (CONVERT(Varchar(6),SUM(Case When CONVERT(Varchar(6), LeaveDate,112) = @YYDD  Then 1  Else 0 End)
                                        *10000/(SUM(Case When InCumbency=1 Then 1 Else 0 End)*100))) END))+'%' LiZhiRate --离职比例             
From PerEmployee 
Group By EmpStateName

/*
EmpStateName   ZaiZhiCount      RuZhiCount    RuZhiRate     LiZhiCount       LiZhiRate
正式工               4663        129             2%            267            5%
NULL                249               0             0%               0            0%
试用工                  0               0             0%               0            0%
实习生                 69               0             0%             0            0%
临时工                 12            0             0%             0            0%
*/



问题如下:①当前百分比保留2为小数的形式显示,四舍五入
  怎么将在职人数限制为@YYDD当月的在职人数
  将上面的格式添加一行,如下显示:
EmpStateName ZaiZhiCount RuZhiCount RuZhiRate LiZhiCount LiZhiRate
正式工 4663 129 2.77% 267 5.73%
NULL 249 0 0.00% 0 0.00%
试用工 0 0 0.00% 0 0.00%
实习生 69 0 0.00% 0 0.00%
临时工 12 0 0.00% 0 0.00%
合计:

感觉自己写的太复杂求高手指点下,谢谢!



------解决方案--------------------
:①当前百分比保留2为小数的形式显示,四舍五入
cast(xx as desc(18,2))
②怎么将在职人数限制为@YYDD当月的在职人数
where 条件后闲置
③将上面的格式添加一行,如下显示:
GROUP BY WITH ROLLUP
------解决方案--------------------
SQL code

DECLARE @YYDD VARCHAR(6)
SET @YYDD = CONVERT(VARCHAR(6), GETDATE(), 112)

SELECT  EmpStateName, SUM(CASE WHEN InCumbency = 1 THEN 1
                               ELSE 0
                          END) ZaiZhiCount  --在职人数没限制月份
        , SUM(CASE WHEN CONVERT(VARCHAR(6), ComeDate, 112) = @YYDD THEN 1
                   ELSE 0
              END) RuZhiCount  --入职人数
        , LTRIM(CONVERT(DECIMAL(9,2), ( CASE WHEN SUM(CASE WHEN C