Попробуйте это:
CTE создает временную таблицу с 4 значениями. Вы можете запустить это как есть в любой базе данных.
with TEST_CTE (ID) as
(select * from (select '1' as a) as aa union all
select * from (select '2' as b) as bb union all
select * from (select '3' as c) as cc union all
select * from (select '4' as d) as dd )
select a.ID, 'Value'|| a.ID, b.ID
from TEST_CTE a, TEST_CTE b
where b.ID = (select min(c.ID) from TEST_CTE c where c.ID > a.ID)
Вот набор результатов:
1 Value1 2
2 Value2 3
3 Value3 4
Наслаждайтесь!
Некоторые запоздалые мысли.
^^^ Синтаксис CTE в Oracle может быть другим. Я мог только запустить его в Teradata. Вы можете заменить его временной таблицей или исправить синтаксис, чтобы сделать его совместимым с Oracle. Оператор select - это простой ванильный SQL, который будет работать с любой базой данных.
^^^ Еще одна вещь, которую стоит отметить. Если поле ID является числовым, вам может потребоваться преобразовать его в CHAR, чтобы объединить его со значением «Value».