동일한 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
나는 현재 샘플 화면 출력
우리가있는 ForDistributionQty 필드를 배포하는 데 사용 아래 상단 결과는 145 가지입니다 SQL 서버 여기에 2008
을 것 사용하고 있습니다 3130, 나는이 문제에 대해 정확하지 않은 분수 (DistVal = 21.586)로 끝나고있다. 그러나 그 21, 21x 145가 단지 3045 인 경우에는 21과 같은 정수가되어야한다. 85 대.
비록 합계가 분배 된 수량만큼 끝났지 만, 소수만 필요합니다. (원래의 reqs에 반대하여) 균등하게 분배 된 수량이 필요하지 않습니다. 어떤 방법이 있습니까? 십진수를 제거하는 동안 분배 된 수량이 동일하게 유지되도록 제어합니다. –
@paulpolo 귀하의 수량은 정수 필드입니까? 다른 경우 DistVal = cast (D.Qty as int) /C.Cnt –
둥근 값이 잘 리기 때문에 Qty가 누락되었습니다. 십진수가있는 양은 21.56이고 DistVal = cast (INT는 D.Qty) /C.Cnt가 21로만되어 있으므로 분배의 총 수에 곱하면 누락이 많습니다. –