ここでSQL Server 2012優先度とパーセンテージに基づいて配分する額
は私のテーブルです:
Declare @AmtToDistribute float = 500.00
DECLARE @TestTable TABLE(TempID INT IDENTITY(1, 1) NOT NULL,
VicID INT ,
VicOrderedAmt MONEY,
RemainingBalance MONEY,
DistPriority INT,
DistPercentOf DECIMAL(5, 2),
DistributionAmt MONEY
);
INSERT INTO @TestTable ([VicID], [VicOrderedAmt], [RemainingBalance], [DistPriority], [DistPercentOf], [DistributionAmt])
VALUES (2318, 5.00, 5.00, 1, 60.00, 0),
(2319, 50.00, 25, 1, 40.00, 0),
(2320, 500.00, 500.0, 2, 33.00, 0),
(2321, 500.00, 500.0, 2, 33.00, 0),
(2322, 500.00, 500.0, 2, 34.00, 0);
SELECT * FROM @TestTable;
私はそれらの値がゼロに達するまで、私は第一優先に各行に金額を分配することを可能にするクエリを見つけようとしているとそれらの値がゼロに達するまで次の優先順位にジャンプします。キャッチは、ドルの金額がDistPercentOf列に基づいて配分されなければならないということです。たとえば、優先度1の2行は、VicIDがVicOrderedAmtが満たされるまで量の60%を取得した後に最初に量を分割し、次に2番目のVicIdが量の40%を取得します。優先度1の金額が満たされたら、優先度2に移動します。
私はいくつかの投稿を見ましたが、優先度は1つしかありません。
ありがとうございます。
私はそれがアプリケーション層の仕事であり、データベースではないと思う。 – cha
第1のレコードについて、あなたはDistributionAmtを300の500の60%に更新したいが、VicOrderedAmtは5であるしたがって、5に更新されますか?同様に、第2記録50および第3記録33%(500-5-50)= 146.85? –
@ RajeshBhat、それは正しいです。私はこれをカーソルとして今でも持っていますが、それは一点でループに入り、DB上で動作します。ちょうどそれを動作させるためにはちょっとした調整が必要です。 – qwerty1906