sql - 按每个(批量)大小的 ID 对 SQL 结果进行分区
问题描述
我有一个来自 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 中做到这一点?
解决方案
用于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
推荐阅读
- java - 在 Java Formatter 中禁用自动换行 - VSCODE
- firebase - 如何让 Firestore 索引合并工作?
- django - 如何使用 group by 并获取每个组中的每条记录?
- sapui5 - SAPUI5:sap.f.card 为基数为 0..1 的聚合定义的多个聚合的问题
- java - 打开/更新部署包中的 Java 程序项目
- python - 使用未命名的列操作 pandas 数据框并使用这些列的值转换为行
- elasticsearch - 弹性搜索 - 无法在单个文档字段中索引大文件内容
- java - 我有一个while循环,我想多次调用该变量是否可能?
- python-3.x - Django 多租户单一登录。登录后应该重定向到子域
- excel - 无法在 Windows 机器上的 Visual Studio Code 中使用 Excelize