You need to enable JavaScript to run this app. Crystal Reports 2016命令对象WHERE子句用Case/IIF报语法错误
优惠活动
大模型
产品
解决方案
定价
更多

Crystal Reports 2016命令对象WHERE子句用Case/IIF报语法错误

Crystal Reports Command查询语法错误解决方案

错误原因

SQL Server 的CASE/IIF仅支持返回标量值,不能直接返回布尔判断表达式作为WHERE的判断条件。你原语句将Material_Trans.Tran_Type Like 'Transfer' And ...这类判断逻辑放在CASE的THEN分支中,不符合SQL语法规范,因此会在LIKE位置触发语法报错,替换为=或IIF时逻辑本质没有变化,所以报错位置不变。
另外你原语句中LIKE 'Transfer'没有使用通配符,和= 'Transfer'执行效果完全一致,直接用等于判断性能更好。

修正后的查询语句

推荐直接用逻辑运算符组合条件,写法更简洁易读:

SELECT DISTINCT 
    Material_Trans.Material_Trans_Date AS Mtd, 
    Material_Trans.Job AS TmJb 
FROM PRODUCTION.dbo.Material_Trans Material_Trans 
WHERE  
    Material_Trans.Tran_Type = 'Transfer'
    AND (
        '{?IssueStock}' <> 'Stock'
        OR 
        Material_Trans.Material_Trans_Date BETWEEN {?SDate} AND {?EDate}
    )
ORDER BY Material_Trans.Material_Trans_Date DESC

可选CASE写法

如果需要保留CASE的编写习惯,可以调整为返回标量值后做等值判断的格式:

SELECT DISTINCT 
    Material_Trans.Material_Trans_Date AS Mtd, 
    Material_Trans.Job AS TmJb 
FROM PRODUCTION.dbo.Material_Trans Material_Trans 
WHERE  
    Material_Trans.Tran_Type = 'Transfer'
    AND 1 = CASE 
              WHEN '{?IssueStock}' = 'Stock' THEN 
                  CASE WHEN Material_Trans.Material_Trans_Date BETWEEN {?SDate} AND {?EDate} THEN 1 ELSE 0 END
              ELSE 1 
            END
ORDER BY Material_Trans.Material_Trans_Date DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:48:02