左外连接问题在晶体报告中

时间:2011-09-06 07:15:23

标签: crystal-reports-xi

我有以下信息,我想每天生成一份出勤报告。我会解释这个概念

EMP表 ID NAME
1哈桑

2侯赛因

3 Hameed

4克鲁兹

5菲利普

交易表

EmpID时间

1 5/8/2010 8:00 AM

2 5/8/2010 9:00 AM

3 5/8/2010 10:00 AM

我的出勤报告应如下所示

日期:2010年5月8日

ID NAME STATUS

1 Hassan Present

2侯赛因礼物

3 Hameed Present

4克鲁兹缺席

5 Philip Absent

我尝试了以下内容,

1.处理左外连接的链接,EMP.ID-> transcatio.EmpID

2.从转换表中按日期分组

  1. 为状态创建了一个公式,看起来像这样
  2. 如果是IsNull({transaction.EmpID}),则'缺席'否则'呈现'

    但该报告仅显示那些在该日期进行交易的员工。 报告看起来像这样,

    ID NAME STATUS

    1 Hassan Present

    2侯赛因礼物

    3 Hammed礼物 它看来,左外连接不起作用。

    提前感谢您提供任何帮助/建议。

3 个答案:

答案 0 :(得分:0)

您是否查看了生成的实际SQL查询?转到数据库 - >显示SQL查询以查看它。不按日期使用组并查看显示的内容也可能会有所帮助。

答案 1 :(得分:0)

尝试使用相同的信息进行正确的外连接,这些信息会告诉您它是按照您想要的方向执行的。

您是否已将联接设置为强制执行? Stack Overflow Enforced Link Discussion

答案 2 :(得分:0)

当您想要在水晶报表中连接两个表时,使用左外连接,同时希望根据右表过滤报表,例如ORDER.ORDER_DATE> ='1-JAN-2014'联接将转换为equi join 解决一些人建议使用的问题 (ISNULL(ORDER.ORDER_DATE)或ORDER.RDER_DATE> ='1-JAN-2014')

上述解决方案仅适用于客户有0个订单且您仍想显示那些custer的情况,但如果某个客户的订单数超过0且订单日期为ON或者在'31 -DEC-2013'之前。在这种情况下,ISNULL(ORDER.ORDER_DATE)将无效。要解决此类问题,您需要添加命令对象或为订单表创建视图,如下所示

  1. 使用以下sql创建命令对象       选择Customer.customer_name,Order.Order_id,order.order_date       来自customer.customer_id = order.Customer_id和order.order_date> ='1-JAN-2014'

  2. 的客户左外连接订单
  3. 第二个解决方案是为订单创建一个视图  创建或替换视图view_orderrs为  从oders中选择*,其中order.order_dt> ='1-JAN-2014' 然后使用报表中的视图而不是订单表作为右表。