Я пытаюсь выделить количество от общего количества, а оставшееся количество должно быть присвоено последней строке. То, что я делаю, у меня есть два продукта (CEOO1, CEOO1) с количеством 50 каждый, и он может назначить 15 для каждой коробки. Я делю Количество на Размер и генерирую строки, используя spt_values
, и хочу выделить для блока на основе размера, и в моем случае 3 строки назначат 15, а последние строки назначат 5 для Продукта CEOO1. То, что я попробовал, ниже.
DECLARE @TempTable TABLE (
ID INT IDENTITY (1,1) PRIMARY KEY,
ProductCode NVARCHAR(50) NULL,
Quantity INT NULL,
Size INT NULL
)
INSERT INTO @TempTable VALUES('CEOO1',50,15)
INSERT INTO @TempTable VALUES('CEOO2',50,15)
SELECT ProductCode,
Quantity,
Size,
Quantity - SUM(Size) OVER (PARTITION BY ProductCode ORDER BY ProductCode ROWS UNBOUNDED PRECEDING) AS Remaing,0 Allocated FROM (
SELECT * FROM (
SELECT ProductCode,Quantity,Size, CEILING(CAST(Quantity AS float)/CAST(Size AS FLOAT)) TotalRows FROM @TempTable
) AS detail
CROSS APPLY
(SELECT DISTINCT number
FROM master.dbo.spt_values
WHERE number>0 AND number<=detail.TotalRows
) RowGen
) AS ProductAllocation
Это дает результат вроде
но я хочу вот так