Crystal reports 多个表上的左外部联接使用selection expert-Crystal Reports隐藏数据

Crystal reports 多个表上的左外部联接使用selection expert-Crystal Reports隐藏数据,crystal-reports,outer-join,multiple-tables,Crystal Reports,Outer Join,Multiple Tables,在一对多关系中,crystal reports在报告两个表时遇到问题 示例表: dbo.stock Barcode Qty 12345 3 11111 5 22222 6 dbo.销售 Barcode SalesDate QtySold<br/> 12345 1/1/2013 1 12345 1/1/2012 1 12345 1/1/201

在一对多关系中,crystal reports在报告两个表时遇到问题


示例表:

dbo.stock

Barcode   Qty   
12345     3     
11111     5     
22222     6     
dbo.销售

Barcode    SalesDate    QtySold<br/>
12345      1/1/2013     1          
12345      1/1/2012     1
12345      1/1/2010     1
11111      1/1/2000     1

报告配置:

Group 1 Header |
Sales          |Sales.barcode Sales.QtySold
Group 1 Footer |Group(Barcode) Sum(QtySold) Stock.Qty

问题是: 显示销售和库存(无销售日期限制)

但当选择数据范围时,输出将删除销售超出所选数据范围的有效产品。2012年1月1日-2013年1月1日

Barcode    Sold    OnHand
12345      2       3
22222              6

我有一个使用子报表的版本,但是由于子报表在每一行中运行,所以使用的开销非常大

你能想出一个解决办法吗?(不使用子报告)

谢谢你


系统说明:
水晶8.5
通过ODBC驱动程序访问Database.dbf文件

那么您想要的是所有条形码信息,而不是日期范围内的销售额

详细地试试这个公式 如果{daterange}中的dbo.sales.SalesDate,那么{dbo.sales.QtySold}中的else为0

将摘要插入组页脚


注意:您可能需要在公式编辑器中切换到Null的默认值,或者在公式中考虑Null值。问题是,即使您正在进行左外部联接,您也在选择右侧表中的日期范围,这实际上使其成为内部联接。如果在记录选择公式中有类似于
{Sales.SalesDate}={?DateParameter}
的内容,请将其删除


相反,使用
isnull({Sales.SalesDate})或{Sales.SalesDate}{DateParameter}
禁止显示详细信息部分,以便仅在报表上显示所需日期的销售额。要处理组页脚中的“销售数量”,请执行以下操作:,仅对日期范围内的记录使用连续总计,而不是直接求和。

如果您希望在crystal report中使用左外联接联接联接两个表,同时希望基于右表筛选报告,例如sales.SalesDate>='1-JAN-2014'联接将转换为equi联接 为了解决这个问题,有些人建议使用 (ISNULL(sales.SalesDate)或sales.SalesDate>='2014年1月1日')

上述解决方案仅在库存销售额为0且您仍希望显示这些库存时有效,但如果某些库存的销售额超过0且销售日期在“2013年12月31日”或之前,该怎么办。在这种情况下,ISNULL(sales.SalesDate)将不起作用。要解决此问题,您需要添加命令对象或创建sales表的视图,如下所示

  • 使用以下sql创建命令对象 选择库存、条形码、销售、销售日期 从库存左侧外部加入库存订单。条形码=订单。条形码和销售。销售日期>='1-JAN-2014'

  • 第二个解决方案是为sales as创建一个视图 创建或替换销售视图作为 选择*from sales where sales.SalesDate>='2014年1月1日' 然后使用报表中的视图而不是order表作为正确的表


  • 我一直在寻找这个,因为我是一个水晶报告新手。非常感谢。
    Barcode    Sold    OnHand
    12345      3       3
    11111      1       5
    22222              6
    
    Barcode    Sold    OnHand
    12345      2       3
    22222              6