【问题标题】:SQL error in Crystal ReportsCrystal Reports 中的 SQL 错误
【发布时间】: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


【解决方案1】:

凭记忆:

...
(
CASE WHEN {?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})
END
)
AND
(
CASE WHEN {?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})
END
)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多