按(批量)大小的ID对SQL分区的结果

Mik*_*ole 1 sql sql-server

我有一个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中执行此操作?

Squ*_*rel 5

用于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)