我需要创建一个报告,为每个主行显示两组子(细节)行。在数据库术语中,您可以将其视为与表'B'具有1:M关系的表'A'以及与表'C'的1:M关系。因此,对于表'A'中的每一行,我想显示来自'B'(最好在一个部分中)的子行列表和来自'C'的子行列表(最好在另一部分中)。如果可能的话,我也希望避免使用子报告。我怎样才能做到最好?
感谢。
答案 0 :(得分:2)
这正是Crystal的目的:)
在下面的示例图片中,此文件按{Client}分组。对于客户“ZZZZ”,有2条记录,所以有2个细节部分,而所有其他客户只有1个细节部分。
根据您的回复,这是怎么回事:
这样,首先显示来自TblB的所有结果,然后显示TblC。表格B& C甚至不必具有相同的字段定义。
答案 1 :(得分:2)
我认为我理解你的问题,即对于表A中的给定行,您希望详细信息部分显示表B中的所有连接行,然后显示表C中的所有连接行(对于任意数量的行)在B或C中,包括零)。我只知道两个解决方案,这两个解决方案都不是直截了当的。
首先,正如您所猜测的那样,不喜欢的子报表选项。 第二个涉及数据库中的一些额外工作;具体而言,创建一个视图,将表B和表C中的条目组合到一个表中,然后可以在主报表中将其用作要报告的可链接对象,并且可以根据需要对表A进行分组。这有多简单取决于B和C的结构有多相似。如果它们实际上是相同的,那么视图可能包含一些简单的内容,如
SELECT 'B' AS DetailType, Field1, Field2, FieldLinkedToTableA
FROM TableB
UNION ALL
SELECT 'C' AS DetailType, Field1, Field2, FieldLinkedToTableA
FROM TAbleC
但是,这两个选项都不能很好地扩展到包含大量结果的报表(除非您的服务器支持索引视图)。
答案 2 :(得分:0)
您可以使用或创建用于分组的列,然后在表A列上分组,然后在表B列上分组,然后分组C.(Crystal的组与t-sql“group by”不同。在Crystal中,它更多的是排序而不是分组。)