You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL WHERE子句中使用CASE语句实现Crystal Report筛选逻辑

原逻辑说明

你提供的Crystal Report筛选条件的核心逻辑为:当BeginCompany不等于0且EndCompany不等于999时,仅保留Company落在两个参数区间内的记录,否则跳过公司维度的筛选,返回所有公司的记录。


等效SQL实现

写法1:CASE语句实现(符合你的需求)

直接在数据集SQL的WHERE子句中添加如下判断即可:

WHERE
  1 = CASE
        WHEN BeginCompany <> 0 AND EndCompany <> 999
          THEN CASE WHEN Company BETWEEN BeginCompany AND EndCompany THEN 1 ELSE 0 END
        ELSE 1
      END
-- 此处可以拼接你原有的其他筛选条件

逻辑说明:当满足参数区间生效的条件时,只有Company落在区间内才会返回1匹配1=1的判断;否则CASE直接返回1,永远满足条件,和原逻辑的1=1完全等效。


写法2:布尔逻辑实现(更推荐,性能更优)

大部分数据库的优化器对布尔逻辑的执行优化效果优于嵌套CASE语句,生产环境更推荐使用如下等价写法:

WHERE
  (
    (BeginCompany <> 0 AND EndCompany <> 999 AND Company BETWEEN BeginCompany AND EndCompany)
    OR
    (BeginCompany = 0 OR EndCompany = 999)
  )
-- 此处可以拼接你原有的其他筛选条件

注意事项

  • 如果BeginCompany、EndCompany两个参数允许为空,需要补充NULL值判断,例如把BeginCompany <> 0调整为COALESCE(BeginCompany, 0) <> 0,避免NULL值导致判断失效。
  • SSRS参数配置时,可以把BeginCompany默认值设为0、EndCompany默认值设为999,即可实现默认查询全量公司数据的效果。

内容的提问来源于stack exchange,提问作者Patman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:42:03