Crystal 报告 -- 将多行合并为一行

Crystal Reports -- combine multiple rows into one row

示例:

RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey
1 .................. James ................. 2 ...............Football
2 .................. Jose .................. 5 ...............Basketball
3 .................. Jennifer .............. 2 ...............Football
3 .................. Jennifer .............. 4 ...............Dodgeball
4 .................. Jaqueline ............. 1 ...............Hockey
4 .................. Jaqueline ............. 3 ...............Baseball
4 .................. Jaqueline ............. 5 ...............Basketball
5 .................. John .................. 6 ...............Track

大家好,我正在尝试制作一份报告,根据我在参数字段中输入的 RecordID,输出特定 RecordID 的单页数据。为了实现这一点,我在报告中为 RecordID 创建了一个参数字段,并为 RecordID 创建了一个组,到目前为止,其他 tables 的数据都很好(其中的安排如 "First name", "last name", 等等, 对于给定的 RecordID).

到目前为止一切都很好,因为这个特定 table 的数据安排与其他人不同。

我的问题是,报告总是每页只输出一个结果,而不是一次输出所有结果;因此,对于 James 示例,我只在第一页选中 "Hockey" 框,然后在第二页仅选中 "Football" 框,依此类推。

我希望此 table 的输出显示如下(对于 RecordID=1):

James:
[checkbox] Hockey.................. [empty checkbox] Dodgeball
[checkbox] Football................ [empty checkbox] Basketball
[empty checkbox] Baseball.......... [empty checkbox] Track

这就是我制作复选框的方式(设置为 Wingdings 字体):

If {RecordID} = 1 Then

Chr(254)

Else

Chr(111)

谁能帮我解决这个问题?

编辑这是我老板尝试的解决方案(目前不起作用):

为每个运动声明一个变量

      Shared BooleanVar Hockey:=False;
Shared BooleanVar Football:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Baseball:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Track:=False;

这对于每个变量:

Shared BooleanVar Hockey; 
        If {SportID} = 1 Then 
        Sport=True 

这是复选框:

Shared BooleanVar Hockey;
If Hockey = True Then
    Chr(254)

如果我理解的话,你的结构是这样的:

按 RecordId 分组 按 SportId 分组 包含所有复选框的详细信息部分

因此,报告选择 RecordId 1,然后选择 SportId 1。因此,第一次出现的详细信息部分的数据是:

RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey

然后,继续RecordId 1,选择下一个SportId,也就是2。所以,details部分第一次出现的数据是:

RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 2 ...............Football

然后,报告选择下一个 RecordId (2),并选择下一个 SportId (5)。因此,详细信息部分中第一次出现的数据是:

RecordID ............ MemberName ........... SportID ......... Sport
2 .................. Jose .................. 5 ...............Basketball

你能看到现在发生了什么吗? (如果我理解你的话)。

它将始终以这种方式检查一项运动。

我会尝试以下解决方案。如果你只有这 6 项运动,那么你知道运动是有效的。

  1. 仅按 RecordId 分组。按 SportId 删除群组。
  2. 将复选框放在组页脚中。
  3. 计算每项运动的出现次数。每项运动使用一个 运行 总字段。当 RecordId 改变时记得重新设置。
  4. 当一项运动的计数器大于零时,使用公式检查每项运动的复选框。

如果您在 运行 总字段方面需要帮助,或者我误解了问题,请告诉我。

已编辑:如何创建 运行 总字段(第 3 步)

  1. 在 "Field Explorer" 上,右键单击 "Running Total Fields",然后单击 "New..."。
  2. 给它最好的名字(是的,名字很重要):例如"HockeyCounter"。
  3. 设置"Field to Summarize" = "SportId".
  4. 设置"Type of Summary" = "Count".
  5. 使用公式按钮设置"Evaluate":
    {YourTableName.SportID} = 1 //where 1 is the Hockey SportId
  6. 设置"Reset" = "on change of group", "group #1" (RecordId).
  7. 将全新的 运行 总计字段拖到第 1 组页脚部分。
  8. 对其他运动重复这些步骤(抱歉,那会很无聊)。

我不确定它是否对您有帮助,但您可以查看 this post 了解更多有关 运行 总字段的信息。