Используйте UNION ALL
, чтобы добавить дополнительные строки, а затем отфильтруйте, чтобы сохранить только 5
SELECT *
FROM (
SELECT col1, col2
FROM your_table
WHERE ROWNUM <= 5
UNION ALL
SELECT NULL, NULL FROM DUAL CONNECT BY LEVEL <= 5
-- ORDER BY col1 NULLS LAST, col2 NULLS LAST -- If necessary
)
WHERE ROWNUM <= 5
Или, если вы делаете это для нескольких групп:
WITH categories ( category, col1, rn ) AS (
SELECT category,
col1,
ROW_NUMBER() OVER ( PARTITION BY category ORDER BY col1 )
FROM products
)
SELECT category,
col1
FROM (
SELECT category,
col1,
ROW_NUMBER() OVER ( PARTITION BY category ORDER BY rn ) AS rn
FROM (
SELECT category,
col1,
rn
FROM categories
WHERE rn <= 5
)
UNION ALL
(
SELECT category,
NULL,
5 + LEVEL
FROM categories
WHERE rn = 1
CONNECT BY LEVEL <= 5
)
)
WHERE rn <= 5;