トランザクション テーブル内の各スペア パーツの移動平均コスト (MAC) を計算するストアド プロシージャを作成しています。これは、各行の MAC のある種の自動チェックと修正です。カーソルを避けているため、セットベースのアプローチを使用しています。
私のトランザクションテーブルには次の列があります:
Transaction No -- 行の取引番号のレコード TransacType -- 取引タイプの値は、BEG (期首残高)、ISS (発行の場合)、および RR (受入株式の場合) になります。
在庫番号 -- 製品番号
コスト -- ストック番号の単位あたりのコスト
数量 -- トランザクションの数量
MAC -- 移動平均コスト
ルール: - トランザクションが RR の場合、Sproc は MAC を計算します。- 後続のすべての ISS トランザクションのコストは、最新の RR の MAC に等しくなります。
サンプルテーブル
-----------------------------------------------------------------------
TransacNo TransacType StockNo Cost Qty MAC
-----------------------------------------------------------------------
0 BEG AE1 450.00 10 450.00
1 RR AE1 460.00 05 453.33
2 ISS AE1 453.33 01 ------
3 RR AE1 460.00 05 455.09
4 ISS AE1 455.09 01 ------
5 BEG AE2 450.00 10 450.00
6 RR AE2 460.00 05 453.33
7 ISS AE2 453.33 01 ------
8 RR AE2 460.00 05 455.09
9 ISS AE2 455.09 01 ------
------------------------------------------------------------------------
移動平均コストの計算式:
Moving Average Cost = ((Latest MAC * Current OnHand Qty) + (RR Cost * RR Qty))
---------------------------------------------------------------
(Current OnHand Qty + RR Qty)
私のMAC修正コード:
Declare @LatestMAC decimal(18,2);
set @LatestMAC = 0.00
Declare @CurrentOnHand int;
Set @CurrentOnHand = 0
Declare @TotalISS int;
Declare @TotalRR int;
Update TransacTable
Set
@TotalISS =
ISNULL((
Select SUM(Qty)
from
TransacTable TT
where
TT.TransacType = 'ISS' and
TT.StockNo = StockNo and
TT.TransacNo < TransacNo),0),
@TotalRR =
ISNULL((
Select SUM(Qty)
from
TransacTable TT
where
TT.TransacType = 'RR' and
TT.StockNo = StockNo and
TT.TransacNo < TransacNo),0),
@LatestMAC = (Select top(1) ISNULL(MAC,0)
from
TransacTable TT
where
TT.TransacType = 'RR' and
TT.StockNo = StockNo and
TT.TransacNo < TransacNo
Order by
TT.TransacNo desc),
@CurrentOnHand = @TotalRR - @TotalISS,
MAC =
Case
WHEN TransacType = 'BEG'
THEN MAC
WHEN TransacType = 'RR'
THEN ((@LatestMAC * @CurrentOnHand) + (Cost * Quantity) / (@CurrentOnHand * Quantity))
else NULL
End,
Cost =
Case
When TransacType = 'ISS'
THEN @LatestMAC
else Cost
end
私の問題は、必要な変数 (TotalISS、TotalRR、CurrentMAC) が MAC 方程式に NULL を返すことです。
更新しているテーブル内の列の値を選択することは許可されていませんか? または私のソリューション自体にエラーがありますか?この例に基づいてソリューションを導き出しました-ここ。 カーソルを使いたくないので、このアプローチを使用しました。
私を助けてください。