Crystal Report转SSRS:如何在WHERE子句中实现if条件逻辑
Crystal Report选择公式转SQL WHERE子句实现方案
原Crystal Report选择公式的核心逻辑是根据SubStatus参数的值动态过滤SLHD.Status字段,可直接转换为以下SQL WHERE子句写法,适配SSRS数据集查询使用:
推荐写法(布尔逻辑组合,可读性最高)
WHERE ( (@SubStatus = 'O' AND SLHD.Status < 2) OR (@SubStatus = 'C' AND SLHD.Status = 2) OR @SubStatus NOT IN ('O', 'C') ) -- 可在此处追加其他原有查询条件
逻辑对应说明
@SubStatus = 'O' AND SLHD.Status < 2:对应原公式{?SubStatus}="O" then {SLHD.Status}<2分支,参数为O时仅返回Status小于2的记录@SubStatus = 'C' AND SLHD.Status = 2:对应原公式{?SubStatus}="C" then {SLHD.Status}=2分支,参数为C时仅返回Status等于2的记录@SubStatus NOT IN ('O', 'C'):对应原公式else 1=1分支,参数为其他值时不对Status字段做过滤,不影响其他查询条件
可选写法(CASE WHEN实现,逻辑等价)
如果更习惯用CASE WHEN语法,也可以使用以下写法,执行效率和上述写法无差异:
WHERE CASE WHEN @SubStatus = 'O' AND SLHD.Status < 2 THEN 1 WHEN @SubStatus = 'C' AND SLHD.Status = 2 THEN 1 WHEN @SubStatus NOT IN ('O', 'C') THEN 1 ELSE 0 END = 1
注意事项
SSRS的SQL查询中参数统一使用@前缀标识,和你原CR中{?SubStatus}参数一一对应,SSRS会自动完成报表参数和SQL查询参数的绑定。
内容的提问来源于stack exchange,提问作者Patman
相关产品推荐
相关产品推荐

