各製品の在庫数に基づいて顧客に製品を割り当てる SQL クエリを作成しました。
つまり、OurQty = 55 で、5 人の顧客 (顧客 1 = 35、顧客 2 = 10、顧客 3 = 3、顧客 4 = 16、顧客 5 = 6) に分割された未処理の注文が 70 ある場合、SQL クエリは予約済みの製品を割り当てます。 OurQty = 0 またはすべての未処理の注文が履行されるまで、各顧客に順番に数量を送信します。
私のSQLクエリ:
WITH allocate
AS (SELECT rd.ponum AS PONum,
od.orderline AS OrderLine,
rd.partnum AS PartNum,
p.partdescription AS PartDescription,
od.ordernum AS OrderNum,
rd.ourqty AS OurQty,
od.number01 AS Reserved,
rd.ourqty - od.number01 AS NewOurQty,
c.custnum AS CustNum,
c.name AS Name,
( rd.ourqty - Sum(od.number01)
OVER (
ORDER BY od.ordernum) ) AS CumulativeSum
FROM dbo.rcvdtl AS rd WITH (nolock)
INNER JOIN dbo.part AS p WITH (nolock)
ON rd.partnum = p.partnum
INNER JOIN dbo.orderdtl AS od WITH (nolock)
ON rd.partnum = od.partnum
INNER JOIN dbo.orderhed AS oh WITH (nolock)
ON od.ordernum = oh.ordernum
INNER JOIN dbo.customer AS c WITH (nolock)
ON od.custnum = c.custnum
WHERE ( rd.ponum = 73 )
AND ( od.number01 > 0 )
AND ( od.openline = 1 ))
SELECT ponum,
orderline,
partnum,
partdescription,
ordernum,
ourqty,
reserved,
newourqty,
custnum,
name,
cumulativesum + reserved AS 'Left In Stock',
CASE
WHEN ( cumulativesum + reserved ) - reserved > 0 THEN reserved
ELSE ( CASE
WHEN ( cumulativesum + reserved ) > 0 THEN
( cumulativesum + reserved )
ELSE 0
END )
END AS Allocated
FROM allocate
これは、'PartNum' がパラメーターとして指定されている場合に正常に機能します。テーブルには複数の「PartNums」が含まれているため、「PartNum」を指定せずにテーブルをクエリすると問題が発生します。これは、(OurQty < CumulativeSum) をチェックするために使用される「CumulativeSum」の精度に影響を与え、在庫の割り当てを防ぐためです。物理的に存在しないもの。
私の最初のアイデアは、データベース テーブルに特定の 'PONum' のパラメーターとして 'PartNum' を繰り返し渡し、その結果をアプリケーションの 1 つのデータセットにマージすることでした。残念ながら、私が使用している SQL クエリを呼び出すプログラムは、'PartNum' をパラメータとして SQL クエリに渡すことができません。
したがって、SQL を使用してテーブル内の各 PartNum の累積合計を計算することは可能ですか?
Microsoft SQL Server 2012 を使用しています