经销商有各种销售产品的渠道。产品基于类别。
网点可以从分销商和其他网点接收产品(转移)。每天的期初余额(数量),收货(数量),转入(数量),转出(数量),销售(数量),期末余额(数量)都维护在一个表格中txnTransactions
。表结构如下:
Create table txnTransactions
(
dDate datetime,
iCategoryID int (FK),
iProduct ID int (FK),
iOutletID int (FK),
iOpeningBalance int,
iReceipt int,
iTranIN int,
iTranOut int,
iSale int,
iClosingBalance int
)
将向分销商显示在指定期间(例如 2013 年 1 月 3 日至 2013 年 3 月 31 日)内所有网点的总交易(产品方面)的报告(我使用 0 作为值来检查如果是所有网点或特定网点)。
在此报告中,所有产品的期初余额将仅在开始日(例如 01/03/2013)检索,然后将显示所有其他字段(产品)的总和(总和)。
在临时表的帮助下,我也实现了同样的目标。但是查询需要很长时间,导致超时。如果我使用简单分组,我需要对期初余额使用聚合函数,这会导致错误数据。
Select
sum(iOpeningBalance), sum(iReceipt), sum(TranIN), sum(TranOut), sum(Sale)
from
txnTransactions
where
datediff(d, dDate, @startDate) <= 0
and datediff(d, dDate, @endDate) >= 0
group by
iProductID
不想用sum(iOpeningBalance)
...
示例输出如下:
ProductID OpeningBalance Receipts TranIN TranOut Sale Total/Balance
1 10 100 40 50 50 50
2 35 165 50 100 50 100
3 3 147 10 60 10 90
期初余额是开始日期,所有其他字段是开始日期和结束日期(程序的输入参数)提供的持续时间的总和。
Total/Balance is: openingbalance + sum(receipts) + sum(TranIn) - sum(TranOut) - sum(Sale)
需要帮助来优化查询。提前致谢。