场景:通过数据列表实现每月考勤数据的统计生成报表展示。
需求如图:
实现步骤:
首先需建立对应的表字段,字段如下:姓名、岗位、打卡日期、上班打卡时间、下班打卡时间,日期字段类型需要选择日期类型,如图:
保存好后,可以点击一键生成表单,然后设置表单样式就可以了:
具体设置表单请参考表单链接:
http://www.hotent.org:8880/chanzhi/index.php/book/EIPSAAS7.2/34.html
编写视图sql,如图参考:
SELECT a.F_yd AS 月度 ,a.F_xm AS 姓名,a.F_gw AS 岗位, /*列转行语法*/ MAX(CASE a.F_r WHEN '01' THEN a.F_kqsjtj ELSE '' END ) '一', MAX(CASE a.F_r WHEN '02' THEN a.F_kqsjtj ELSE '' END ) '二', MAX(CASE a.F_r WHEN '03' THEN a.F_kqsjtj ELSE '' END ) '三', MAX(CASE a.F_r WHEN '04' THEN a.F_kqsjtj ELSE '' END ) '四', MAX(CASE a.F_r WHEN '05' THEN a.F_kqsjtj ELSE '' END ) '五', MAX(CASE a.F_r WHEN '06' THEN a.F_kqsjtj ELSE '' END ) '六', MAX(CASE a.F_r WHEN '07' THEN a.F_kqsjtj ELSE '' END ) '七', MAX(CASE a.F_r WHEN '08' THEN a.F_kqsjtj ELSE '' END ) '八', MAX(CASE a.F_r WHEN '09' THEN a.F_kqsjtj ELSE '' END ) '九', MAX(CASE a.F_r WHEN '10' THEN a.F_kqsjtj ELSE '' END ) '十', MAX(CASE a.F_r WHEN '11' THEN a.F_kqsjtj ELSE '' END ) '十一', MAX(CASE a.F_r WHEN '12' THEN a.F_kqsjtj ELSE '' END ) '十二', MAX(CASE a.F_r WHEN '13' THEN a.F_kqsjtj ELSE '' END ) '十三', MAX(CASE a.F_r WHEN '14' THEN a.F_kqsjtj ELSE '' END ) '十四', MAX(CASE a.F_r WHEN '15' THEN a.F_kqsjtj ELSE '' END ) '十五', MAX(CASE a.F_r WHEN '16' THEN a.F_kqsjtj ELSE '' END ) '十六', MAX(CASE a.F_r WHEN '17' THEN a.F_kqsjtj ELSE '' END ) '十七', MAX(CASE a.F_r WHEN '18' THEN a.F_kqsjtj ELSE '' END ) '十八', MAX(CASE a.F_r WHEN '19' THEN a.F_kqsjtj ELSE '' END ) '十九', MAX(CASE a.F_r WHEN '20' THEN a.F_kqsjtj ELSE '' END ) '二十', MAX(CASE a.F_r WHEN '21' THEN a.F_kqsjtj ELSE '' END ) '二十一', MAX(CASE a.F_r WHEN '22' THEN a.F_kqsjtj ELSE '' END ) '二十二', MAX(CASE a.F_r WHEN '23' THEN a.F_kqsjtj ELSE '' END ) '二十三', MAX(CASE a.F_r WHEN '24' THEN a.F_kqsjtj ELSE '' END ) '二十四', MAX(CASE a.F_r WHEN '25' THEN a.F_kqsjtj ELSE '' END ) '二十五', MAX(CASE a.F_r WHEN '26' THEN a.F_kqsjtj ELSE '' END ) '二十六', MAX(CASE a.F_r WHEN '27' THEN a.F_kqsjtj ELSE '' END ) '二十七', MAX(CASE a.F_r WHEN '28' THEN a.F_kqsjtj ELSE '' END ) '二十八', MAX(CASE a.F_r WHEN '29' THEN a.F_kqsjtj ELSE '' END ) '二十九', MAX(CASE a.F_r WHEN '30' THEN a.F_kqsjtj ELSE '' END ) '三十', MAX(CASE a.F_r WHEN '31' THEN a.F_kqsjtj ELSE '' END ) '三十一' FROM (select F_xm,F_gw,DATE_FORMAT(f_dkrq,'%Y%m') as F_yd, -- 使用case 语法判断日期是否为周末,打卡时间是否为迟到、早退 case when WEEKDAY(F_dkrq) = 6 then "周日" when WEEKDAY(F_dkrq) = 5 then "周六" when (DATE_FORMAT(F_sbdksjaa,'%H:%i') > DATE_FORMAT( CURDATE( ) ,'09:00'))&&(DATE_FORMAT(f_xbdksjaa,'%H:%i') >= DATE_FORMAT( CURDATE( ) ,'18:00')) then concat( DATE_FORMAT( F_sbdksjaa, '%H:%i' ), '-', DATE_FORMAT( f_xbdksjaa, '%H:%i' ), '迟到' ) WHEN (DATE_FORMAT(F_sbdksjaa,'%H:%i') <= DATE_FORMAT( CURDATE( ) ,'09:00'))&&(DATE_FORMAT(f_xbdksjaa,'%H:%i') < DATE_FORMAT( CURDATE( ) ,'18:00')) then concat( DATE_FORMAT( F_sbdksjaa, '%H:%i' ), '-', DATE_FORMAT( f_xbdksjaa, '%H:%i' ), '早退' ) WHEN (DATE_FORMAT(F_sbdksjaa,'%H:%i') > DATE_FORMAT( CURDATE( ) ,'09:00'))&&(DATE_FORMAT(f_xbdksjaa,'%H:%i') < DATE_FORMAT( CURDATE( ) ,'18:00')) then concat( DATE_FORMAT( F_sbdksjaa, '%H:%i' ), '-', DATE_FORMAT( f_xbdksjaa, '%H:%i' ), '迟到早退') else concat( DATE_FORMAT( F_sbdksjaa, '%H:%i' ), '-', DATE_FORMAT( f_xbdksjaa, '%H:%i' )) end as F_kqsjtj ,day(f_dkrq) as F_r FROM w_kqjcxxb)a GROUP BY a.F_yd,a.F_xm,a.F_gw;
效果:
报表配置:
使用宏天EIP系统功能:
应用中心—>数据应用—>表单列表
点击添加,sql配置写的sql生产的视图
生成好后,可以通过字段设置,编写规则配置字段颜色
点击对应的数据列表—>点击字段设置—>点击字段后面报按钮
点击保存后,进入视图列表添加
保存后生成最终效果:
可下载sql导入: