为了尽可能清楚,我将把这篇文章分成 3 个部分。第一个是您需要知道的信息。第二个将是我迄今为止尝试过的解决方案。第三部分将是问题。我还必须准确地说这是我第一次使用 CrystalReports。
资讯
我目前正在使用带有 C# 的 Visual Studio 2010,并且正在使用 SAP Crystal 报表。我正在使用 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
基本上,我将一系列日期作为参数传递给 Crystal Reports,以仅显示这些日期之间的信息。然后,我创建了 2 个参数 :StartDate
和EndDate
两个 type 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
在报告的页脚处,我使用了一个 Summary 字段,在该字段中我得到了所有named的总和sumTotalQty
。totalPrice
对于named ,我有另一个用于相同目的的字段sumTotalPrice
。
我有 2 行数据测试,它们是:
Size name Quantity sold Total Price
------------------------------------------------------------------------------
Big 2 $6.00
XBig 7 $28.00
该字段sumTotalQty
显示9
并sumTotalPrice
显示$34.00
准确的结果。我必须准确地说第一行具有2013-10-29
as 的值,orders.date
第二行具有 as 的值2013-10-30
。
现在,我想选择要显示结果的日期范围。例如,我选择 from 2013-10-30
to today,我应该只得到第二行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
...)?
感谢您为我提供的所有帮助。