You are on page 1of 1

/* How to Generate a Row Number by Grouping - PL/SQL */

/* Outlines how to use the partition by function with ROWNUM */


CREATE TABLE ITEM_LIST
(RECORD_ID NUMBER GENERATED ALWAYS AS IDENTITY
,ITEM_NUMBER VARCHAR2(100) NOT NULL);

INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('80200');


INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('80300');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('80400');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('80500');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('90200');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('90300');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('91300');
INSERT INTO ITEM_LIST (ITEM_NUMBER) VALUES ('91400');
/
SELECT RECORD_ID
,ITEM_NUMBER
,SUBSTR(ITEM_NUMBER,1,2) ITEM_PREFIX
,ROW_NUMBER() OVER (PARTITION BY SUBSTR(ITEM_NUMBER,1,2) ORDER BY
SUBSTR(ITEM_NUMBER,1,2)) ROW_WITHIN_PREFIX
FROM ITEM_LIST
/
/* RESULT:
RECORD_ID ITEM_NUMBER ITEM PREFIX ROW_WITHIN_PREFIX
---------- ------------- ----------- -----------------
1 80200 80 1
2 80300 80 2
3 80400 80 3
4 80500 80 4
5 90200 90 1
6 90300 90 2
7 91300 91 1
8 91400 91 2
*/

You might also like