SQL COMMAND + CASE Crystal Reports

时间:2014-10-27 18:35:07

标签: sql sql-server crystal-reports sqlcommand

我遇到SQL Command和CASE的问题。我是Crystal Reports / SQL的新手,我有一个基本的代码,我正在学习。我想清理一个从SQL Server导入的字段。我只想做这样简单的事情:

SELECT  "I"."I_TYPE", "Alleg”  =
CASE  
    WHEN "ALLEGs"."ALLEG”  LIKE ‘*im*’ THEN ‘Improper’
    ELSE ‘UNKNOWN’
END

我收到一条错误,指出数据库连接器错误:

'42000:[MS][SQL..Incorrect syntax near ' . ' . Databse vender code 102. 

您甚至可以在SQL命令中使用CASE作为IF THEN语句。我知道SQL表达式,但我试图将数据拉到sql命令,以防止性能下降。

2 个答案:

答案 0 :(得分:0)

我不确定水晶报告,但您的查询形式看起来不正确。它应该是

SELECT I.I_TYPE, 
CASE WHEN ALLEGs.ALLEG LIKE '%im%' THEN 'Improper' ELSE 'UNKNOWN' END AS 'Alleg'

答案 1 :(得分:0)

Rahul,对于服务器的直接SQL命令是正确的。 但是,有时在运行Crystal Reports时,我们在报表中使用VBA来进行一些数据调整,而不是动态修改原始SQL。

这使得原始SQL成为已知结果(可在SQL Server上验证),然后修改Crystal中的输出以适应最终用户的过滤要求。

这对于大型结果集来说效率不高,但是当结果较小(低于50k记录)时,我们通常会让我们的团队采用简单的(后过滤)来减少设计和测试时间。 这个技术适用于选项部分的动态过滤器。

示例:[记录选择]

if {?Select Sales Person} <> "ENT" then
    {R0033___P2A.ProjectionSP} = {?Select Sales Person} and {R0033___P2A.FM} >= 0
else
    {R0033___P2A.ProjectionSP} > ""  and {R0033___P2A.FM} >= 0  

其中{?选择销售人员}是用户选择过滤器,{R0033___P2A}是预定义的报告视图或存储过程。