按每个(批处理)大小的ID划分SQL结果

按每个(批处理)大小的ID划分SQL结果,sql,sql-server,Sql,Sql Server,我有一个SQL的记录集输出,我想在我们的生产中使用它,我想根据特定的批次大小用批次号标识每个生产订单(prodid) 样本数据(此处每个生产订单有一个项目,但每个生产订单可以有X个项目): 将nocount设置为ON 声明@FirstTable表(ProdId NVARCHAR(10),ItemID NVARCHAR(10)) 声明@ii INT 设置@ii=1 而@ii

我有一个SQL的记录集输出,我想在我们的生产中使用它,我想根据特定的批次大小用批次号标识每个生产订单(prodid)

样本数据(此处每个生产订单有一个项目,但每个生产订单可以有X个项目):

将nocount设置为ON
声明@FirstTable表(ProdId NVARCHAR(10),ItemID NVARCHAR(10))
声明@ii INT
设置@ii=1
而@ii<50
开始
插入@FirstTable
值('P'+convert(varchar(10),@ii),'I'+convert(varchar(10),@ii*10))
设置@ii=@ii+1
结束
从@FirstTable中选择*
例如,如果批次大小为3,我希望每个批次中有3个生产订单的批次,我需要的结果是:

例如,如果批次大小为4,我希望在每个批次中有4个生产订单的批次,我需要的结果是:

当然,最后一批在大多数情况下都会小于批量大小。 有谁能告诉我如何在SQL中执行此操作吗?

使用
densite\u 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
使用
densite\u 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

你能提供输入数据吗,因为我没有得到ItemId出现的点,我也不能找出所需的逻辑。Thnx sabhari,编辑过的..你能提供输入数据吗,因为我没有得到ItemId出现的点,我也不能找出所需的逻辑。Thnx sabhari,编辑过的..完美!有一百万只松鼠,你是救命恩人:)太好了!百万只松鼠,你是救命恩人:)