我将Crystal Reports 14与Oracle DB结合使用。如果我有相关的表Authors
和Books
,我会选择所有拥有“#code”代码的作者。在他们的标题中,Crystal会将Books.title
放入SQL SELECT
子句中,即使我不在报告中的任何位置使用任何Books
字段(除了记录选择)。查询如下所示:
SELECT "AUTHORS"."NAME", "BOOKS"."TITLE"
FROM "AUTHORS" INNER JOIN "BOOKS" ON "AUTHORS"."ID"="BOOKS"."AUTHOR"
WHERE "BOOKS"."TITLE" LIKE '%code%'
这会导致问题,因为即使我使用" Distinct"选项,我将为每位作者提供许多条目(如果他们在标题中有超过一本书的代码')。但我想要的只是作者的一个条目。 "鲜明"不要在这里工作,因为每个条目都是截然不同的,他们的书名不同。
如何避免在"BOOKS"."TITLE"
子句中获取SELECT
,如下所示:
SELECT DISTINCT "AUTHORS"."NAME"
FROM "AUTHORS" INNER JOIN "BOOKS" ON "AUTHORS"."ID"="BOOKS"."AUTHOR"
WHERE "BOOKS"."TITLE" LIKE '%code%'
如果这不可行,那么在我的方案中获得不同作者的最佳解决方法是什么?
更新
我应该补充一点,目前我在抑制详情部分中使用了这个公式:
{AUTHORS.ID} = previous({AUTHORS.ID})
这个解决方案以及@Beth提出的组解决方案的问题在于查询是相同的,并且DB无缘无故地返回太多数据。在这两种解决方案中,数据都在Crystal Reports中过滤/重新分组,而不是在DB中。
答案 0 :(得分:0)
您可以按报告中的作者进行分组并取消books.title
详细信息吗?
按作者分组,在报告中的Insert
菜单下,选择“Group...
”,然后在第一个组合框中选择author.id,然后点击“确定”。您会注意到您的报告已更改为在详细信息部分的上方和下方引入了“组页眉”和“页脚”部分。您可以取消详细信息部分,只有作者才能打印。
如果您只想让作者遇到过,那么您需要使用发送到数据源的命令和您想要使用的SQL,而不是像现在这样直接使用这些表。
您可以使用参数创建一个命令作为后端。您将使用该参数化命令而不是您现在使用的表。尝试在不使用参数的情况下创建命令,然后在完成此操作后,可以将现有参数添加到命令SQL中。