信息
我目前使用C#语言和SAP Crystal reports工具,结合MySQL数据库来显示数据。
以下是我用于显示报表所使用的表格:
Table : orders
Fields : id(primaryKey), date(DATE), quantity(INT), fksizes(INT), fkclients(INT)
Table : sizes
Fields : id(primaryKey), name(VARCHAR(30)), price(FLOAT)
Relationship between these 2 tables : orders.fksizes with sizes.id
基本上,我将一系列日期作为参数传递给水晶报表,以仅在这些日期之间显示信息。然后,我创建了2个参数:StartDate
和EndDate
,两者都是Date
类型。
我尝试了什么
这是我使用的原始查询,用于显示没有日期范围条件的内容:
SELECT sizes.name, SUM(orders.quantity) AS totalQty,
(SUM(sizes.price) * orders.quantity) AS totalPrice,
orders.date
FROM orders
INNER JOIN sizes ON orders.fksizes = sizes.id
GROUP BY sizes.name, orders.date
这个查询正确地显示出每个尺码名称的销售总量和总价格。在报告底部,我使用了一个汇总字段,其中我得到所有名为
totalQty
的总和,命名为sumTotalQty
。我还有另一个字段,用于同样的目的,针对totalPrice
命名为sumTotalPrice
。我有两行测试数据, 分别是:
Size name Quantity sold Total Price
------------------------------------------------------------------------------
Big 2 $6.00
XBig 7 $28.00
字段
sumTotalQty
显示9
,字段sumTotalPrice
显示$34.00
,这是准确的结果。需要特别指出的是,第一行orders.date
的值为2013-10-29
,而第二行则为2013-10-30
。
现在,我想选择一段日期范围,以便显示结果。例如,我选择从2013-10-30
到今天,那么我应该只得到第二行数据,sumTotalQty
显示7
,sumTotalPrice
显示$28.00
。我成功地显示了单行数据,但是sumTotalQty
显示9
,sumTotalPrice
显示$34.00
,与日期范围不符。
我试图在SQL查询中添加WHERE子句来指定日期范围(在数据库--> 数据库专家...):
SELECT sizes.name, SUM(orders.quantity) AS totalQty,
(SUM(sizes.price) * orders.quantity) AS totalPrice, orders.date
FROM orders
INNER JOIN sizes ON orders.fksizes = sizes.id
WHERE orders.date BETWEEN '{?StartDate}' AND '{?EndDate}'
GROUP BY sizes.name, orders.date
我没有看到结果显示。因此,我认为{?StartDate}
和{?EndDate}
没有设置,但我不确定。同样的情况也适用于WHERE orders.date BETWEEN @StartDate AND @EndDate
。
问题
- 即使我输入了一个日期范围并提示设置它们,为什么
{?StartDate}
和{?EndDate}
没有设置? - 在原始查询中(不带WHERE子句),如何使用给定的日期范围正确地得到我的汇总字段结果?就像它从数据库中汇总而非报告字段。
编辑 经过多次搜索,我想到了另外两个问题:
是否可以在报表中添加
DateTimePicker
以便用户能够轻松输入起始日期和结束日期?之后报表将自动刷新。是否有一种方法来创建或使用Crystal Reports事件(
OnLoad
,AfterLoad
等)?
感谢您提供的所有帮助。