如何根据查询中的列创建 100 的间隔?

Pan*_*tea 5 oracle oracle-11g-r2

我有一个结构如下的表:

create table item_test
(item_id       varchar2(10),
 item_row      number)
Run Code Online (Sandbox Code Playgroud)

示例数据如下所示,请注意Item_Row列中的数字从 1 开始,然后加 1 到没有任何间隙的数字。我需要做的是([1-100] , [101-200] , [201-300] ,......)为每个创建 100 的间隔Item_Id

   Item_Id       Item_Row    
 ------------   ----------- 
    A               1           
    A               2            
    A              ...
    A              ...
    A              236  /* Item_Row starts from 1 and continues to 236 */

    B               1
    B              ...
    B              ...
    B              173  /* Item_Row starts from 1 and continues to 173 */
    
    C               1
    C               2
    C              ...
    C              ...
    C              300  /* Item_Row starts from 1 and continues to 300 */ 
Run Code Online (Sandbox Code Playgroud)

结果如下:

  Item_Id       RowNum_From     RowNum_From
 ------------   -----------     ----------- 
     A              1               100
     A             101              200
     A             201              236

     B              1               100
     B             101              173
     
     C              1               100 
     C             101              200
     C             201              300 
Run Code Online (Sandbox Code Playgroud)

有什么具体的功能吗?

Phi*_*erg 10

诀窍是使用该trunc函数。

这是使用纯 SQL 的解决方案:

create table item_test
(item_id       varchar2(10),
 item_row      number);

insert into item_test
select 'A', level from dual connect by level <= 236
union all
select 'B', level from dual connect by level <= 173
union all
select 'C', level from dual connect by level <= 300;
commit;

select item_id, min(item_row) as item_row_from, max(item_row) as item_row_to
  from item_test
 group by item_id, trunc(item_row-1, -2)
 order by item_id, trunc(item_row-1, -2);
Run Code Online (Sandbox Code Playgroud)

结果:

ITEM_ID    ITEM_ROW_FROM ITEM_ROW_TO
---------- ------------- -----------
A                      1         100
A                    101         200
A                    201         236
B                      1         100
B                    101         173
C                      1         100
C                    101         200
C                    201         300

8 rows selected.
Run Code Online (Sandbox Code Playgroud)