Crystal报表查询:筛选缺失指定扣款码FAMLI的工资单
解决方案:筛选缺失指定扣款码的Crystal Reports记录
你的原始查询仅筛选了扣款码为空的行,但实际需求是某员工在指定日期的工资单中完全没有FAMLI这个扣款码,可以通过以下两种方式实现:
方法1:子查询排除已存在FAMLI的记录
在Crystal Reports的选择公式中,用子查询过滤掉已包含FAMLI扣款码的工资单:
{UPR00100.EMPLCLAS} startswith ["", "CO"] and {UPR30300.CHEKDATE} in Date (2024,1,18) to Date (2024,1,31) and not exists ( select * from UPR30300 as sub where sub.EMPLOYID = {UPR30300.EMPLOYID} and sub.CHEKDATE = {UPR30300.CHEKDATE} and sub.PAYROLCD = "FAMLI" )
逻辑说明:先锁定目标州员工和指定日期的工资单,再排除同一员工同一发薪日期下已存在FAMLI扣款码的记录,剩余结果即为缺失FAMLI的工资单。
方法2:分组汇总验证
如果子查询使用受限,可通过分组统计实现:
- 按
EMPLOYID(员工ID)和CHEKDATE(发薪日期)创建分组 - 组选择公式添加:
Sum(if {UPR30300.PAYROLCD} = "FAMLI" then 1 else 0) = 0
同时保留基础筛选条件:
{UPR00100.EMPLCLAS} startswith ["", "CO"] and {UPR30300.CHEKDATE} in Date (2024,1,18) to Date (2024,1,31)
逻辑说明:统计每组(单个员工的单次工资单)中FAMLI的出现次数,次数为0的即为缺失该扣款码的记录。
注意事项
- 确认
EMPLOYID+CHEKDATE是唯一标识单次工资单的字段,若系统有专属工资单编号字段,可替换使用 - 检查
PAYROLCD的大小写是否与系统存储一致,避免因大小写不匹配导致筛选失效
内容的提问来源于stack exchange,提问作者Kris Adams
相关产品推荐
相关产品推荐

