Crystal reports crystal使用表中不同行的记录报告组名公式

Crystal reports crystal使用表中不同行的记录报告组名公式,crystal-reports,crystal-reports-2008,Crystal Reports,Crystal Reports 2008,我正在尝试使用表中与此组中包含的记录链接到的行不同的行中的记录创建组名公式 首先,我的数据中有单词group,因此为了避免混淆,我将其斜体化,以便与Crystal Reports中的组区分开来 从中提取此组名记录的表有: {GroupSection.Group}库存数据库中的项目组 {GroupSection.Section}节(它们类似于嵌套在每个库存组中的子组) {GroupSection.Description}问题从这里开始,因为{GroupSection.Group}和{GroupS

我正在尝试使用表中与此组中包含的记录链接到的行不同的行中的记录创建组名公式

首先,我的数据中有单词group,因此为了避免混淆,我将其斜体化,以便与Crystal Reports中的组区分开来

从中提取此组名记录的表有:

  • {GroupSection.Group}库存数据库中的项目组
  • {GroupSection.Section}节(它们类似于嵌套在每个库存组中的子组)
  • {GroupSection.Description}问题从这里开始,因为{GroupSection.Group}和{GroupSection.Section}的描述都存储在这里
这是我的表格示例:

    {GroupSection.Group}    {GroupSection.Section}     {GroupSection.Description}
    3.00                      0.00                      PRECAST CONCRETE PRODUCT
    3.00                     50.00                      MISC PRECAST CONCRETE PRODUCT
    3.00                     99.00                      *Z* MISC PRECAST CONCRETE PRODUC
    4.00                      0.00                      CEMENT SUPPLIES
    4.00                     50.00                      MISC CEMENT SUPPLIES
    4.00                     99.00                      *Z* MISC CEMENT SUPPLIES
此表中的第一行和第四行是{GroupSection.Group}的说明(它们在{GroupSection.Section}行中有一个0.00),其余是{GroupSection.Section}的说明。此报告中包含的实际数据位于不同的表中,并且与此表中的前两个字段具有相同的两个字段,但没有第三个字段,因此需要链接并使用此表来描述组名。另一个表没有链接到0.00行的记录

我希望我的组树如下所示:

    3.  PRECAST CONCRETE PRODUCT
          50  MISC PRECAST CONCRETE
          99  *Z* MISC PRECAST CONCRETE
    4.  CEMENT SUPPLIES
          50  MISC CEMENT SUPPLIES
          99  *Z* MISC CEMENT SUPPLIES
这是我现在在顶级组的组名公式中使用的有缺陷的公式:

ToText (left(Cstr({GroupSection.Group}),2))+ " " + ToText (If {GroupSection.Section} <> 0 then {GroupSection.Description} Else " ")
这就是我的组树现在的样子:

    3.  MISC PRECAST CONCRETE
          50  MISC PRECAST CONCRETE
          99  *Z* MISC PRECAST CONCRETE
    4.  MISC CEMENT SUPPLIES
          50  MISC CEMENT SUPPLIES
          99  *Z* MISC CEMENT SUPPLIES
如您所见,我需要从表中的第一行获取外部组的名称,即使它将组中的记录链接到表中的第二行和第三行。有道理吗

我尝试在公式中使用previous(),但它给出了以下错误:无法使用此函数,因为它必须在以后求值

编辑:我还尝试再次添加同一个表,并将其链接到组和部分,这对组名有效,但现在我有190万条记录,这是真正重复的。因此,除非我能想出如何修复多个记录,否则这是行不通的

组名称描述中的“.”是一个不相关的问题。我所能做的就是将3.00显示为3,将50.00显示为50

谢谢你的帮助


2013年12月30日为用户@Promethean编辑:

对不起,我是SQL命令表的新手。我从另一个报告中获取了一个命令表,并对其进行了一些更改。这就是我取得的成绩:

SELECT 
"GroupSection"."Group",
"GroupSection"."Section",
"GroupSection"."Description"

 FROM   ("SpruceDotNet"."dbo"."InventoryCommon" "InventoryCommon" with (nolock)

INNER JOIN 
"SpruceDotNet"."dbo"."GroupSection" "GroupSection" with (nolock)
ON "InventoryCommon"."Group"="GroupSection"."Group")

WHERE
"GroupSection"."Section"=0

ORDER BY 
"InventoryCommon"."Group"
您是否有可能使用此信息修改您的命令表,以便像我这样的假人可以跟随它?看起来您两次添加了其中一个字段,但我并没有完全理解

然后,您将如何将命令表连接到包含更详细信息的更大表中?我必须使用正确的连接方式,这样我就不会复制记录了


非常感谢您的帮助。

这真是太少了!正如您在开始时指出的,您的问题似乎在数据库中。 如果您按
{GroupSection.group}
分组,并将
{GroupSection.Description}
放在它旁边的组头中,您应该得到
3。其他预制混凝土
。然后你把
{GroupSection.Section}
放在细节部分,
{GroupSection.Description}
放在它旁边,你应该得到
50杂项预制混凝土
。所以在这一点上,我不会使用公式来分组,而是使用字段。因此,只有一个组(
{GroupSection.group}
)和细节部分中的其余组。请尝试一下那个建议,让我知道它是如何工作的

编辑:

我认为这行不通。因为所有内容都在同一个表中,所以除非第二组中的第一项恰好与第一组中的第一项相同,否则您总是会得到错误的描述。要解决这个问题,我想到了两件事:

  • 创建一个新表并拆分描述
  • 再次将表添加到报告中,并对主组使用一个别名,对第二个组使用第二个别名
    CR将向您发送一条消息,说明您的报告中已经有该表,但您可以忽略该消息。我会给#2打一针,看看它是如何工作的。这肯定比创建一个全新的表要简单。

    如果在命令表中使用SQL执行此操作,这可能非常简单:

    select a.Group, a.Section, a.Description,
           b.GroupName
    
    from GroupSection a
    
    left outer join
        (
           select concat( format(b.Group, 0), '. ', a.Description) as GroupName, b.Group
           from GroupSection b
           where b.Section = 0
        ) c
    on a.Group = b.Group
    
    根据您的数据库提供程序,
    concat
    可能会发生变化。这反映了MySQL。对反映样本数据的表执行此操作将产生以下结果:

    {GroupSection.Group}|{GroupSection.Section}|{GroupSection.Description}       |{GroupSection.GroupName}
    3.00                |  0.00                | PRECAST CONCRETE PRODUCT        | 3. PRECAST CONCRETE PRODUCT
    3.00                | 50.00                | MISC PRECAST CONCRETE PRODUCT   | 3. MISC PRECAST CONCRETE PRODUCT
    3.00                | 99.00                | *Z* MISC PRECAST CONCRETE PRODUC| 3. *Z* MISC PRECAST CONCRETE PRODUC
    4.00                |  0.00                | CEMENT SUPPLIES                 | 4. CEMENT SUPPLIES
    4.00                | 50.00                | MISC CEMENT SUPPLIES            | 4. MISC CEMENT SUPPLIES
    4.00                | 99.00                | *Z* MISC CEMENT SUPPLIES        | 4. *Z* MISC CEMENT SUPPLIES
    
    这可以很容易地分组在水晶,以产生您想要的结果

    开始编辑:

    看看这个。它是一个使用您的表结构的工作SQLfiddle。完成这一部分只需要GroupSection,所以我忽略了另一部分。您可以使用不同的查询来查看是什么形状,但它将传递给Crystal必要的派生字段,以便在Crystal中分组。您仍然需要在Crystal中的新字段GroupName上分组

    对于其他表,可以像对待任何其他表一样对待命令表。只要确保将“关键点/链接”字段添加到命令中(如果该字段不在实体模型中)

    这是小提琴:

    为了防止那里的注释让人看不清代码,这里去掉了我的注释:

    SELECT gs2.GroupName,
           gs.sGroup, gs.Section, gs.Description
    
    FROM GroupSection gs
    
    left outer join
        (
         SELECT concat( format(inn.sGroup, 0), '. ', inn.Description) as GroupName, inn.sGroup
    
         FROM GroupSection inn
    
         WHERE inn.Section = 0
        ) gs2
        ON gs.sGroup = gs2.sGroup
    

    我已经在使用字段来分组,而不是公式。我试图对公式做的是更改组的名称,使其在组树中具有描述。组树位于报告的左侧。它作为书签导出到pdf以帮助导航大型文档。我按{GroupSection.Group}分组,然后嵌套在它下面,我按{GroupSection.Section}分组。当我尝试添加{GroupSection.descrip时,它在组树中完美地显示了数字
    SELECT gs2.GroupName,
           gs.sGroup, gs.Section, gs.Description
    
    FROM GroupSection gs
    
    left outer join
        (
         SELECT concat( format(inn.sGroup, 0), '. ', inn.Description) as GroupName, inn.sGroup
    
         FROM GroupSection inn
    
         WHERE inn.Section = 0
        ) gs2
        ON gs.sGroup = gs2.sGroup