我需要關於如何將行值分配給具有相同ID的多行的SQL Server幫助。爲了說明,將值分配給SQL Server中的多行
- 編號= 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和分支幾乎相等。
我得到了像下面這樣的東西,但有些困惑和迷失的路徑。
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
我目前使用SQL Server 2008的
下面是一個示例屏幕輸出
上的結果是145個分行,下面我們用它來分配ForDistributionQty場是3130,我得到了一個分數(DistVal = 21.586),這是不正確的這個問題,它應該是一個整數如21,但是,如果它只是21,那麼21×145只是3045這是害羞的85個單位。
雖然總結結束等於分配的數量,但我只需要整數,我不需要一個均勻分佈的數量(作爲對我的原始需求),我有結束與小數,有沒有什麼辦法去除小數時控制並確保分配的數量相等。 –
@paulpolo你的qty是一個int字段還是別的東西?如果別的DistVal = cast(D.Qty爲int)/C.Cnt –
有很多數量缺失,因爲四捨五入的值會被截斷,例如。小數點的數量是21.56,DistVal = cast(D.Qty as INT)/C.Cnt只有21,所以當你將它乘以分配總數時,會有很多缺失。 –