以Case...When...Then...End分列输出

本文提供了一种使用SQL语句按不同维度统计员工出勤状态的方法,包括按个人、按部门每日统计及按月统计等。通过CASE...WHEN...THEN...END结构,实现了对各种出勤状态的有效分类。

以Case...When...Then...End分列输出

SELECT 日期, 姓名, (CASE 出勤状态 WHEN '白班' THEN '○' END) AS 白班, (CASE 出勤状态 WHEN '夜班' THEN '○' END) AS 夜班, (CASE 出勤状态 WHEN '休息' THEN '○' END) AS 休息, (CASE 出勤状态 WHEN '调休' THEN '○' END) AS 调休, (CASE 出勤状态 WHEN '病假' THEN '○' END) AS 病假, (CASE 出勤状态 WHEN '事假' THEN '○' END) AS 事假, (CASE 出勤状态 WHEN '迟到' THEN '○' END) AS 迟到, (CASE 出勤状态 WHEN '早退' THEN '○' END) AS 早退, (CASE 出勤状态 WHEN '旷工' THEN '○' END) AS 旷工, (CASE 出勤状态 WHEN '其他' THEN '○' END) AS 其他, 部门, 身份证号, id FROM dbo.人事_考勤表 WHERE (部门 = @部门) AND (日期 = @日期)





'按出勤状态统计某部门每天的出勤数据
SELECT 日期, 部门,
count(CASE 出勤状态 WHEN '白班' THEN '○' END) AS 白班,
count(CASE 出勤状态 WHEN '夜班' THEN '○' END) AS 夜班,
count(CASE 出勤状态 WHEN '休息' THEN '○' END) AS 休息,
count(CASE 出勤状态 WHEN '调休' THEN '○' END) AS 调休,
count(CASE 出勤状态 WHEN '病假' THEN '○' END) AS 病假,
count(CASE 出勤状态 WHEN '事假' THEN '○' END) AS 事假,
count(CASE 出勤状态 WHEN '迟到' THEN '○' END) AS 迟到,
count(CASE 出勤状态 WHEN '早退' THEN '○' END) AS 早退,
count(CASE 出勤状态 WHEN '旷工' THEN '○' END) AS 旷工,
count(CASE 出勤状态 WHEN '其他' THEN '○' END) AS 其他
FROM dbo.人事_考勤表
where 部门='设备工具科'
group by 日期,部门
order by 日期 desc

 

'按月统计各单位出勤状态
SELECT     STR(YEAR(日期)) + '-' + LTRIM(STR(MONTH(日期))) AS 日期, 部门, COUNT(CASE 出勤状态 WHEN '白班' THEN '○' END) AS 白班,
                      COUNT(CASE 出勤状态 WHEN '夜班' THEN '○' END) AS 夜班, COUNT(CASE 出勤状态 WHEN '休息' THEN '○' END) AS 休息,
                      COUNT(CASE 出勤状态 WHEN '调休' THEN '○' END) AS 调休, COUNT(CASE 出勤状态 WHEN '病假' THEN '○' END) AS 病假,
                      COUNT(CASE 出勤状态 WHEN '事假' THEN '○' END) AS 事假, COUNT(CASE 出勤状态 WHEN '迟到' THEN '○' END) AS 迟到,
                      COUNT(CASE 出勤状态 WHEN '早退' THEN '○' END) AS 早退, COUNT(CASE 出勤状态 WHEN '旷工' THEN '○' END) AS 旷工,
                      COUNT(CASE 出勤状态 WHEN '其他' THEN '○' END) AS 其他
FROM         dbo.人事_考勤表
WHERE     (部门 = @部门) AND (YEAR(日期) = YEAR(@日期))
GROUP BY STR(YEAR(日期)) + '-' + LTRIM(STR(MONTH(日期))), 部门
ORDER BY STR(YEAR(日期)) + '-' + LTRIM(STR(MONTH(日期))) DESC
 
转自: http://www.cnblogs.com/sonar/archive/2006/09/05/494902.html
SELECT '生产制造成本' AS '科目名称', '6401.01/6401.05' AS '科目编码', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 1 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '一月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 2 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '二月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 3 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '三月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 4 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '四月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 5 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '五月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 6 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '六月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 7 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '七月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 8 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '八月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 9 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '九月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 10 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 11 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十一月', CAST(COALESCE(SUM(CASE WHEN MONTH(tgv.FDATE) = 12 THEN tgve.FDEBIT ELSE 0 END), 0) AS DECIMAL(18,3)) AS '十二月', CAST(COALESCE(SUM(tgve.FDEBIT), 0) AS DECIMAL(18,3)) AS '年度合计' FROM T_GL_VOUCHER tgv LEFT JOIN T_GL_VOUCHERENTRY tgve ON tgv.FVOUCHERID = tgve.FVOUCHERID LEFT JOIN T_BD_FLEXITEMDETAILV tbf ON tgve.FDETAILID = tbf.FID LEFT JOIN ( SELECT tba.FACCTID, tba.FNUMBER, tba.FUSEORGID, tbal.FNAME, tbal.FFULLNAME FROM T_BD_ACCOUNT tba LEFT JOIN T_BD_ACCOUNT_L tbal ON tba.FACCTID = tbal.FACCTID WHERE tba.FUSEORGID = '101041' AND (tba.FNUMBER = '6401.01' OR tba.FNUMBER = '6401.05') ) tba ON tgve.FACCOUNTID = tba.FACCTID LEFT JOIN ( SELECT tbd.FMASTERID, tbdl.FNAME FROM T_BD_DEPARTMENT tbd LEFT JOIN T_BD_DEPARTMENT_L tbdl ON tbd.FDEPTID = tbdl.FDEPTID WHERE {[tbdl.FNAME = ${FNAME}]} AND tbd.FUSEORGID = '101041' ) dept_info ON tbf.FFLEX5 = dept_info.FMASTERID WHERE tgv.FACCTORGID = '101041' AND {[tgv.FYEAR = ${FYEAR}]} AND tba.FACCTID IS NOT NULL AND dept_info.FMASTERID IS NOT NULL 仿照该语句 实现 按照《应收单列表》业务日期、销售部门为“冷柜中小业态”取数“不含税金额本位币” 此需求
11-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值