我有一个报告,我需要连接两个表,但字段之间的定义不同,我不能更改表模式,因为它的JDEdwards。所以我有一个字段,左对齐30个字符,另一个字符右对齐12个字符。值始终低于12个字符。所以问题不在于尺寸的差异,而在于对齐/填充。我必须做一个左连接。现在,报告只是在数据选择中进行比较并导致内部联接。但我需要将其更改为左连接以停止丢失行。有没有办法做到这一点?
当我在Database Expert中创建用于执行左连接的链接时,我最终会将连接表中的数据全部留空,因为由于填充差异而找不到任何行。
答案 0 :(得分:1)
由于您只需要加入表中的一个值,您可以创建一个SQL表达式来为您获取值,而无需通过Database Expert向报表本身添加任何表。您将能够使用任何有效的SQL,因此您可以在不受Crystal限制的情况下执行任何操作。
例如,假设您的报表包含Table_A,其外键为30个字符左对齐,并且您尝试连接到Table_B以获取某个字段,但该键是12个字符右对齐。 Oracle中的一个简单示例是这样的:
case when "Table_A"."ForeignKey" is null then null
else
(select Table_B.SomeFieldYouWant
from Table_B
where rpad(Table_B.PrimaryKey,30,'0')="Table_A"."ForeignKey"
end
重要的是要注意,在SQL表达式中,使用双引号引用的任何字段都意味着它将引用报表中的表/字段而不是子查询中的新表。这是将子查询与报表数据相关联的方法。