U
Usage of analytic function for splitting rows to pages.
WITH p AS ( SELECT 2 AS page_id, -- setup for pagination 5 AS page_size FROM DUAL ), d AS ( SELECT 'A' AS group_name, 11 AS id FROM DUAL UNION ALL SELECT 'A' AS group_name, 12 AS id FROM DUAL UNION ALL SELECT 'A' AS group_name, 13 AS id FROM DUAL UNION ALL SELECT 'B' AS group_name, 21 AS id FROM DUAL UNION ALL SELECT 'B' AS group_name, 22 AS id FROM DUAL UNION ALL SELECT 'B' AS group_name, 23 AS id FROM DUAL UNION ALL SELECT 'B' AS group_name, 24 AS id FROM DUAL UNION ALL SELECT 'C' AS group_name, 31 AS id FROM DUAL UNION ALL SELECT 'C' AS group_name, 32 AS id FROM DUAL UNION ALL SELECT 'D' AS group_name, 41 AS id FROM DUAL UNION ALL SELECT 'D' AS group_name, 42 AS id FROM DUAL UNION ALL SELECT 'D' AS group_name, 43 AS id FROM DUAL ) SELECT d.* FROM ( SELECT d.*, ROW_NUMBER() OVER (ORDER BY d.group_name, d.id) AS row# FROM d ) d JOIN p ON 1 = 1 WHERE d.row# BETWEEN (p.page_id - 1) * p.page_size + 1 AND p.page_id * p.page_size ORDER BY 1, 2;
Comments
Post a Comment