0

我有一个第三方程序,它使用数据库表在屏幕上显示用户创建的(在应用程序内)字段,所以我有一个名为 User_Created_Fields 的表,看起来像

TABLE         FIELD_NAME          GROUP     LABEL
products      charge1             1         First Charge
products      begin_date1         1         Begin Date
products      end_date1           1         End Date 
products      charge2             2         First Charge
products      begin_date2         2         Begin Date
products      end_date2           2         End Date 

当应用程序在表格中看到它时,它会在应用程序中显示以下内容

Group 1
First Charge   *text area for input*
Begin Date     *text area for input*
End Date       *text area for input*

----------

Group 2
First Charge  *text area for input* 
Begin Date     *text area for input*
End Date       *text area for input*

应用程序将这些字段的数据保存到在 User_Created_Fields 表中指定的表和字段名称中,因此 PRODUCTS.charge1 和 PRODUCTS.charge2 字段(与相应的日期字段相同)。

现在我需要创建一个报告,选择存储在 Products 表中的值,但是......因为字段将由用户添加,所以我需要选择来自 User_Created_Fields 表中的 Table 和 field_name 列的列。

所以输出看起来像

PRODUCTS.Begin_date, PRODUCTS.End_date, PRODUCTS.Charge1, User_Created_Fields.Group

查询看起来(非常粗略)像

select  (select Table ||'.'||field_name  from User_Created_Fields where Label='First Charge' and Group= (select Group from User_created_fields where label ='First Charge') ) from Products

这将进入一个水晶报告,所以我不能像往常一样使用 sql 来生成 sql。可能还有一种更水晶的方式来做到这一点,但我不知道它是什么。显然,此信息将与销售详细信息相结合,但为了简单起见,我将那部分省略了,因为这部分足够复杂。我正在使用水晶 11 和甲骨文 10

如果你已经阅读了所有这些,你应该得到奖励......谢谢。

4

1 回答 1

0

据我所知,Crystal Reports 可以访问存储过程而不是 sql 语句。因此,将用于创建 sql 语句的代码放入存储过程中,并将其用作报告的数据源。

您可能必须确定要支持的最大列数并始终返回该列数以使水晶满意。

于 2012-05-15T18:50:22.860 回答