我有一个SQL记录集输出,我想在我们的生产中使用该记录集,我想根据特定的批量大小用批号标识每个生产订单(prodid)。
样本数据(此处每个生产订单只有一个物料,但每个生产订单可以是X个物料):
SET nocount ON
DECLARE @FirstTable TABLE (ProdId NVARCHAR(10), ItemID NVARCHAR(10))
DECLARE @ii INT
SET @ii = 1
WHILE @ii < 50
BEGIN
INSERT INTO @FirstTable
VALUES ('P' + convert(varchar(10),@ii), 'I'+ convert(varchar(10),@ii * 10))
SET @ii = @ii + 1
END
SELECT * FROM @FirstTable
例如,如果批次大小为3,而我希望每个批次具有3个生产订单的批次,则我需要的结果是:
例如,如果批次大小为4,而我希望每个批次都具有4个生产订单的批次,那么我所需的结果是:
当然,最后一批通常会小于批大小。 谁能告诉我如何用SQL做到这一点?
答案 0 :(得分:5)
使用dense_rank()
生成ProdId
的序列号。之后,使用以下表达式(SeqNo - 1) / @batch_size + 1
获得您的BatchId
select *,
BatchId = (SeqNo - 1) / @batch_size + 1
from
(
select *,
SeqNo = dense_rank() over (order by ProdId)
from yourtable
) d