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

时间:2019-04-10 06:30:26

标签: 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 

例如,如果批次大小为3,而我希望每个批次具有3个生产订单的批次,则我需要的结果是:

enter image description here

例如,如果批次大小为4,而我希望每个批次都具有4个生产订单的批次,那么我所需的结果是:

enter image description here

当然,最后一批通常会小于批大小。 谁能告诉我如何用SQL做到这一点?

1 个答案:

答案 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