SSRS报表开发:如何筛选出存在至少一条状态含16的子提交的项目的全部子提交记录
解决SSRS报表中筛选含特定状态项目所有子提交记录的问题
嘿,你说的这个需求其实很容易搞定,不需要复杂的多表操作,用下面两种简单的SQL写法就能实现,直接作为SSRS的数据集查询就行:
方法1:使用窗口函数(推荐,简洁高效)
窗口函数可以帮我们给每一行标记它所属的项目是否存在符合条件的子提交记录,再筛选出符合要求的行:
SELECT 项目, 子提交编号(SubmittalNumber), 描述(Description), 状态(Status) FROM ( SELECT *, -- 统计当前项目中状态包含"16"的记录数 COUNT(CASE WHEN 状态(Status) LIKE '16%' THEN 1 END) OVER (PARTITION BY 项目) AS Has16Status FROM 你的表名 ) AS SubQuery WHERE Has16Status > 0;
逻辑说明:
- 内层子查询用
COUNT(CASE...) OVER (PARTITION BY 项目),对每个项目统计状态以"16"开头的记录数量 - 外层筛选出统计数大于0的行,也就是该项目至少有一条符合条件的记录,从而保留这个项目的所有子提交行
方法2:使用子查询关联
如果你的SQL环境不支持窗口函数(比如旧版本数据库),可以先找出所有包含"16"状态的项目,再关联原表获取这些项目的所有记录:
SELECT t.项目, t.子提交编号(SubmittalNumber), t.描述(Description), t.状态(Status) FROM 你的表名 t INNER JOIN ( -- 先筛选出至少有一条状态含"16"的项目 SELECT DISTINCT 项目 FROM 你的表名 WHERE 状态(Status) LIKE '16%' ) AS FilterProjects ON t.项目 = FilterProjects.项目;
逻辑说明:
- 子查询
FilterProjects先获取所有存在符合条件子提交的项目ID(去重) - 用
INNER JOIN关联原表,只保留这些项目的所有记录
这两种方法都能完美实现你想要的效果,用你的示例数据运行后,会返回项目53613和1063的所有子提交记录,完全符合期望的结果。
内容的提问来源于stack exchange,提问作者hjReads
相关产品推荐
相关产品推荐

