Getting the following output when i use the below query
SELECT P.RefNum
,Ian.ID
,Ian.Date
,Igl.Name
,Ian.Comments
,ROW_NUMBER() OVER (
PARTITION BY P.RefNum
,I.Name ORDER BY Ian.Name
) AS ROWNUMBER
FROM Table1 P
INNER JOIN Table2 Igl ON P.GrpNum = Igl.GrpNum
INNER JOIN Table3 I ON Igl.Num = I.Num
INNER JOIN Table4 Ian ON Igl.Num = Ian.Num
WHERE P.RefNum = <InputParameter>
But the expected output should be as below (Refer RowNumber column)
Advertisement
Answer
First find “groups” each of those rows belongs to (partitioned by refnum and name) (that’s what the temp CTE does), and then apply dense_rank to fetch the final result.
Sample data (simplified, as I don’t have your tables):
SQL> WITH 2 test (refnum, 3 id, 4 datecreated, 5 name) 6 AS 7 (SELECT 3, 7000, DATE '2022-04-18', 'A-1' FROM DUAL 8 UNION ALL 9 SELECT 3, 7001, DATE '2022-04-19', 'A-1' FROM DUAL 10 UNION ALL 11 SELECT 3, 7002, DATE '2022-04-20', 'A-1' FROM DUAL 12 UNION ALL 13 SELECT 3, 7003, DATE '2022-03-29', '2-3' FROM DUAL 14 UNION ALL 15 SELECT 3, 7004, DATE '2022-03-30', '2-3' FROM DUAL 16 UNION ALL 17 SELECT 3, 7005, DATE '2022-04-11', 'L-5' FROM DUAL),
Query begins here:
18 temp
19 AS
20 (SELECT t.*,
21 id - ROW_NUMBER () OVER (PARTITION BY refnum, name ORDER BY id) grp
22 FROM test t)
23 SELECT t.*, DENSE_RANK () OVER (ORDER BY grp) rn
24 FROM temp t
25 ORDER BY refnum, name, id;
REFNUM ID DATECREATE NAM GRP RN
---------- ---------- ---------- --- ---------- ----------
3 7000 18-04-2022 A-1 6999 1
3 7001 19-04-2022 A-1 6999 1
3 7002 20-04-2022 A-1 6999 1
3 7005 11-04-2022 L-5 7004 3
3 7003 29-03-2022 2-3 7002 2
3 7004 30-03-2022 2-3 7002 2
6 rows selected.
SQL>

