我有一个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
Run Code Online (Sandbox Code Playgroud)
例如,如果批次大小为3,而我希望每个批次中具有3个生产订单的批次,则我所需的结果是:
例如,如果批次大小为4,而我希望每个批次具有4个生产订单的批次,则我所需的结果是:
当然,最后一批通常会小于批大小。谁能告诉我如何在SQL中执行此操作?
用于dense_rank()生成by的序列号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
Run Code Online (Sandbox Code Playgroud)