ディストリビューターには、製品を販売するためのさまざまなアウトレットがあります。製品はカテゴリに基づいています。
販売店は、流通業者や他の販売店から製品を受け取ることができます (転送)。毎日の開始残高 (数量)、受け取り (数量)、転送 IN (数量)、転送 (数量)、販売 (数量)、終了残高 (数量) がテーブルに保持されます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 を使用しました)。すべてのコンセントまたは特定のコンセントの場合)。
このレポートでは、すべての商品の期首残高が開始日 (例: 2013 年 1 月 3 日) のみ取得され、他のすべてのフィールド (商品ごと) の合計 (合計) が表示されます。
一時テーブルの助けを借りて同じことを達成しました。ただし、クエリには非常に長い時間がかかり、タイムアウトが発生します。単純なグループ化を使用すると、期首残高に集計関数を使用する必要があり、結果として間違ったデータが生成されます。
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)
クエリを最適化するために助けが必要です。前もって感謝します。