我遇到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命令,以防止性能下降。
答案 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}是预定义的报告视图或存储过程。