从Crystal Reports中的单个记录中检索/分组同一表中的多个行

时间:2014-08-04 05:50:49

标签: sql database oracle crystal-reports

我的数据库中有一些表格如下。它们已使用Database Expert添加到Crystal Reports中,并使用各种相应的ID列在“链接”选项卡中链接在一起:

CUSTOMER_PUBLIC_ID
------------------
CUSTOMER_ID
STORE_ID
PUBLIC_ID

STORE
-----
STORE_ID
STORE_NAME

PURCHASE
--------
PURCHASE_ID
CUSTOMER_ID
STORE_ID
PRICE

每位客户为他们购买的每家商店都有不同的公共ID。例如,以下是客户的一些行,其中CUSTOMER_ID =' 1'来自CUSTOMER_PUBLIC_ID表:

CUSTOMER_ID / STORE_ID / PUBLIC_ID
1           / 10       / 100500
1           / 11       / 3400
1           / 99       / 900800

STORE_ID 99是一个虚构的商店,用于为任何特定客户保留与商店无关的客户公共ID。

Crystal Reports'默认自动生成的SQL语句正在按照我的预期检索每次购买的所有客户信息:如果在STORE_ID =' 11'的商店中进行了购买,那么我为该客户获取STORE_ID =的PUBLIC_ID = ' 11&#39 ;.我的报告显示如下:

Purchase ID: 600, Store ID: 11, Customer Public ID: 3400, Price: 5.99

我还想为我的客户检索与商店无关的PUBLIC_ID(使用STORE_ID =' 99'),所以我可以显示这样的内容:

Purchase ID: 600, Store ID: 11, Customer Public ID: 3400, Customer Global ID: 900800, Price: 5.99

在Crystal Reports中执行此操作的正确方法是什么?现在,我有一个Public_ID公式字段,可以按如下方式检索值:

Stringvar CustomerPublicID := {CUSTOMER_PUBLIC_ID.PUBLIC_ID};

这将检索与进行购买的STORE_ID相对应的PUBLIC_ID。什么是检索全球客户ID的正确方法" (正如我之前在Crystal Reports中所说的那样)是吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Sub Report解决此问题。

  1. 由于每位客户都会检索数据,因此请按CUSTOMER_ID对主报表进行分组。

  2. @Store中创建一个公式detail section,并压制详细信息。

    Shared Numbervar Store;
    if STORE_ID=99
    Then Store:=PUBLIC_ID
    
  3. 现在获取子报告并将其放在Customer组的组页脚中。

  4. 使用@Store将子报告与Change sub report links相关联。

  5. 在子报告中创建公式@Retrive并写下以下代码。同样在子报告中,创建与主报告相同的分组层次结构。

    Shared Numbervar Store;
    Store
    
  6. 现在,您可以使用子报告中的公式Retrive进行显示,并在子报告中显示您的数据,并压缩主报告中除子报告部分之外的所有部分。

    希望这有帮助