同じIDを持つ複数の行に行の値を配布する方法については、SQL Serverのヘルプが必要です。例示する、SQL Serverの複数の行に値を渡す
- ID = ProductInventoryCode
- 数量= QuantityInStock
ForDistribution:
Id | Qty | TotalNoOfBranchesWithId
---+--------+-------------------------
1 | 40 | 2
2 | 33 | 3
3 | 21 | 2
分散値
Id | BranchCode | Qty | QtyFromForDistributionTable
-------------------------------------------------------
1 101 13 20
1 102 8 20
2 101 10 11
2 102 2 10
2 103 3 12
3 101 1 11
3 102 12 10
を受信するテーブル
可能な限り、各IDとブランチの分布はほぼ同じでなければなりません。
私は以下のようなものを手に入れましたが、多少混乱して経路を失いました。
私は現在、SQL Server 2008のを使用してい
with rs as
(
select
r.*, cume.cumequantity,
coalesce(s.shipped, 0) AS shipped
from
tmpForDistribution r
cross apply
(SELECT SUM([QuantityInStock]) AS cumequantity
FROM tmpForDistribution r2
WHERE r2.ProductInventoryCode = r.ProductInventoryCode) cume
left join
(SELECT ProductInventoryCode, COUNT(ProductInventoryCode) AS shipped
FROM tmpDistributed s
GROUP BY s.ProductInventoryCode) s ON r.ProductInventoryCode = s.ProductInventoryCode
)
select
rs.ProductInventoryCode, rs.cumequantity, rs.QuantityInStock,
***"how to distribute"***
from rs
我々はあるForDistributionQtyフィールドを配布するために使用下回っここでサンプル画面出力
は、上の結果は、145の支店でいます3130、私はこの問題のために正しくない分数(DistVal = 21.586)で終わっています、それは21のような整数でなければなりません、その21だけ21x145はちょうど3045です85台
私は分配されたqtyに等しい合計が終わったにもかかわらず、小数点で終わっていますが、私は整数だけが必要です。(私の元のreqsに対抗する)小数点を削除しながら分散されたqtyが等しくなるように制御します。 –
@paulpoloあなたの個数はintフィールドなのですか? DistVal = cast(D.Qty as int)/C.Cnt –
丸められた値が切り捨てられるため、qtyが欠落しています。小数点以下の桁数は21.56で、DistVal = cast(INTとしてのD.Qty)/C.Cntは21になります。したがって、それを合計配分数に掛け合わせると欠けています。 –