如何在Crystal Reports

时间:2016-02-24 16:18:43

标签: sql oracle plsql crystal-reports crystal-reports-2013

我有一个基于SQL命令的Crystal Report,它部分由过程名称组成。我尝试做的是向SQL命令添加一个多值字符串参数,以便最终用户可以输入部分过程名称,报告将只返回字符串匹配的相关过程。

例如,用户应该能够输入"%KNEE%"和"%HIP%"进入参数并返回包含单词" KNEE"的所有过程。和" HIP"。问题是我无法弄清楚如何操纵SQL中的参数值来实现这一目标。我之前使用报告参数(而不是SQL Command参数)通过简单地将行{table.procedure_name} like {?name match parameter}添加到记录选择公式来完成此操作,但在SQL命令中采用相同的方法会得到一个& #34; ORA-00907:缺少右括号"错误。

有关如何操作多值字符串参数以实现此目的的任何建议吗?

2 个答案:

答案 0 :(得分:1)

我不想将此作为答案发布,因为我不关心解决方案,但这是我找到解决此问题的唯一方法。 我必须指示用户在参数提示符下输入'%KNEE%','%HIP%','%ETC%'。那么像{?name match parameter}这样的{table.procedure_name}应该可以在SQL中使用。不是最佳的,特别是对于具有%的情况。我很想听到有人提供更好的解决方案,因为我已经多次摔跤了。

答案 1 :(得分:0)

这是一种方法:

SELECT column0
FROM   table0
INNER JOIN (
    SELECT trim('%' || x.column_value.extract('e/text()') || '%') SEARCH
    FROM  ( SELECT 'arm,knee' options FROM dual ) t,
    TABLE (xmlsequence(xmltype('<e><e>' || replace(t.options,',','</e><e>')|| '</e></e>').extract('e/e'))) x

) v ON column0 LIKE v.search

使用Oracle的XML功能将逗号分隔的字符串转换为等效的行数,并使用%%包装每个子句。然后将这些行连接到所需的表。

要与CR一起使用,请创建单值字符串参数并将其添加到代码中:

...
FROM  ( SELECT '{?search_param}' options FROM dual ) t,
...