我有一张如下表格
select 1 group_rank, 1 row_rank union all
select 1 , 2 union all
select 1 , 3 union all
select 1 , 4 union all
select 1 , 5 union all
select 2 , 1 union all
select 2 , 2 union all
select 2 , 3 union all
select 2 , 4 union all
select 2 , 5 union all
select 3 , 1 union all
select 3 , 2 union all
select 3 , 3 union all
select 3 , 4 union all
select 3 , 5 union all
select 4 , 1 union all
select 4 , 2 union all
select 4 , 3 union all
select 4 , 4 union all
select 4 , 5
我想根据大小进一步打破row_rank。如果我的大小是2,则进一步拆分row_rank,如下所示。输出第三列应如下所示
select 1 group_rank, 1 row_rank, 1 batch_number union all
select 1 , 2, 1 union all
select 1 , 3, 2 union all
select 1 , 4, 2 union all
select 1 , 5, 3 union all
select 2 , 1, 4 union all
select 2 , 2, 4 union all
select 2 , 3, 5 union all
select 2 , 4, 5 union all
select 2 , 5, 6 union all
select 3 , 1, 7 union all
select 3 , 2, 7 union all
select 3 , 3, 8 union all
select 3 , 4, 8 union all
select 3 , 5, 9 union all
select 4 , 1, 10 union all
select 4 , 2, 10 union all
select 4 , 3, 11 union all
select 4 , 4, 11 union all
select 4 , 5, 12
由于分割尺寸为2,
第一个group_rank中的前两行获得第一批编号,
第一个group_rank中的第三个第四行获得第二个批号,
第一行中的第五行group_rank获得第三批号,
第二个group_rank中的前两行获得第四个批号,
第二个group_rank中的第三个第四行获得第五个批号,第五行得到第3组_rank得到第6批号
......等等..
因为,我改变了分割尺寸,,批号应该相应地增大或缩小。 请提供我的sql server TSQL查询来执行此操作。
谢谢,
答案 0 :(得分:0)
对我来说听起来像简单的数学,至少有一个基于0或基于1的伏都教:
((row_number() over (order by group_rank, row_rank) - 1) / @batch_size) + 1
这是做什么的:
row_number() over (order by group_rank, row_rank)
:获取在整个集合中排序的行号,先由group_rank
然后按row_rank
- 1
:将行号设为0 / @batch_size
:除以您想要的“批量大小”(整数除以最佳值)+ 1
:将结果从1开始,以匹配您的输出