根据第二个select语句选择要包含在select中的列

时间:2012-05-15 15:24:57

标签: sql oracle crystal-reports

我有一个第三方程序,它使用数据库表来显示用户在屏幕上创建的(在应用程序内)字段,所以我有一个名为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表中指定的表和字段名称,以便PRODUC.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。可能有更多的水晶esq方式来做到这一点,但我不知道它是什么。这个信息显然会与销售细节结合起来,但是我把这部分留给了简单的部分,因为这部分是非常复杂的。我正在使用水晶11和oracle 10

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

1 个答案:

答案 0 :(得分:0)

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

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