【发布时间】:2014-03-21 02:14:45
【问题描述】:
我正在 Crystal Reports 中制作报告。我设置了参数来选择生效日期和终止日期的日期范围。但事实证明,这些参数应该是可选的。所以我一直在尝试设置报告,以便用户不必输入日期,除非他们想要过滤。为此,我想我会设置默认日期,当使用这些日期时,会告诉报告获取所有数据。这是我用来执行此操作的 SQL 代码:
SELECT
P.VISION_POLICY_NUM
,P.VP_POLICYHOLDER_NAM
,P.VP_EFF_DT
,P.VP_TERMINATED_DT
,P.VP_STATE_CD
,P.VP_SMALL_BUSINESS_IND
,P.VP_GROUP_TYPE_DESC
FROM
GLX_VISION_POLICY_REF P
WHERE
(if {?Effective From} = '01-Jan-1900'
and {?Effective To} = '01-Jan-3000'
then (P.VP_EFF_DT > '01-Jan-1900' OR P.VP_EFF_DT is null)
else P.VP_EFF_DT BETWEEN {?Effective From} AND {?Effective To})
AND
(if {?Terminated From} = '01-Jan-1900'
and {?Terminated To} = '01-Jan-3000'
then (P.VP_TERMINATED_DT > '01-Jan-1900' OR P.VP_TERMINATED_DT is null)
else P.VP_TERMINATED_DT BETWEEN {?Terminated From} AND {?Terminated To})
AND
('{?State}' = 'ALL' OR P.VP_STATE_CD = '{?State}')
AND
('{?Group Type}' = 'ALL' OR P.VP_GROUP_TYPE_DESC = '{?Group Type}')
我在运行时收到此错误:
Failed to retrieve data from database.
Details: HY000:[Oracle][ODBC][Ora]ORA-00936: invalid relational operator
[Database Vendor Code: 920]
这段代码是在我开始收到错误之前添加的:
(if {?Effective From} = '01-Jan-1900'
and {?Effective To} = '01-Jan-3000'
then (P.VP_EFF_DT > '01-Jan-1900' OR P.VP_EFF_DT is null)
else P.VP_EFF_DT BETWEEN {?Effective From} AND {?Effective To})
AND
(if {?Terminated From} = '01-Jan-1900'
and {?Terminated To} = '01-Jan-3000'
then (P.VP_TERMINATED_DT > '01-Jan-1900' OR P.VP_TERMINATED_DT is null)
else P.VP_TERMINATED_DT BETWEEN {?Terminated From} AND {?Terminated To})
差不多,如果用户使用默认日期运行报告,那么所有数据都会返回。如果用户更改了这些默认日期,则报告会根据所选日期范围获取数据。很直接。我无法找出问题所在。是我的代码,还是和水晶报表有关?
【问题讨论】:
-
用数据库类型标记您的问题。
-
主机变量是否有空格?
标签: sql crystal-reports