2012-05-15 50 views
0

我有第三方程序使用数据库表来显示用户在屏幕上创建(在应用程序内)字段,所以我有一个名为User_Created_Fields的表,像根据第二个select语句选择要包含在select中的列

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字段s(对于相应的日期字段也是一样的)。

现在我需要创建一个报表,选择存储在Products表中的值,但是...因为这些字段将由用户添加,所以我需要选择来自表中的列和User_Created_Fields中的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

如果您已阅读所有这些,您应得到奖励....谢谢。

+0

我可以得到选择运行,但是...它总是只返回表格名称和字段名称作为文本...它不会实际执行表格和字段名称作为选择的一部分 – user1023993

+0

您可以使用动态SQL,存储过程和全局临时表的组合来实现此目的,有些参考资料可以查看以下链接http://www.dbforums.com/crystal-reports/1634385-using-oracle-package-data-source-report .html – psaraj12

回答

0

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

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

+0

最终用户可以更改列数。猜猜我可以添加一个很高的数字,报告将被设置一段时间,但是,如果没有必要的话会更好 – user1023993