2013-04-18 97 views
0

我有一个奇怪的问题。我有数据存储在2个表中。Crystal Reports&Raiser's Edge:从2个连接表中选择数据

表1:包含数据有关单个

  • IndividualID
  • 生日
  • 电子邮件

表2:包含个人名称分成每个具有标号3名的字段。

  • IndividualID
  • NAMETYPE
  • 名称

这意味着说了NAMETYPE = 1,我会得到的姓,为NAMETYPE = 2,我会得到中间名,并为NAMETYPE = 3我得到名字。

我需要创建一个水晶报表,将在一行中列出此人的名字,如

姓+名字+中间名

我的经验是关系到如何把这个数据出了问题和连接。

如果我只是将这两个表之间的连接创建为左外连接,那么我无法选择要选择哪个NameType。这意味着有时候我会得到姓氏,其他时候是MiddleName等。看起来就像连接不一致。此外,我无法迭代预期的3个值,所以似乎我只能每次都拉同一个值。

我试图通过添加一个命令来解决这个问题,该命令将依次从第二个表中选择每个名称。但是,此报告旨在集成到不支持Command对象的Raiser's Edge中。换句话说,命令对象不适合我。

那么我在这里有什么选择?我更喜欢不使用我知道可以工作的子报表,但是会有性能开销。有没有其他方法可以做到这一点?

感谢

回答

0

最简单的方法是小组IndividualID,然后跟踪第一,中间和最后的名字通过变量。没有必要担心记录选择或连接,真的。试试这样的:

//Formula for group header 
whileprintingrecords; 
stringvar first := ""; 
stringvar middle := ""; 
stringvar last := ""; 

//Formula for details section 
whileprintingrecords; 
stringvar first; 
stringvar middle; 
stringvar last; 
select {table2.NameType} 
case 1 : first := {table2.Name} 
case 2 : middle := {table2.Name} 
case 3 : last := {table2.Name} 

//Formula for group footer (the section to be displayed) 
whileprintingrecords; 
stringvar first; 
stringvar middle; 
stringvar last; 

last + ", " + first + " " + middle