LATERAL не работает, потому что он введен с версии 12. Как говорят GMB. Это один из подходов к вашей проблеме:
SELECT t1.id, t3.name
FROM test t1
left join (select id, name from test t2) t3
on t1.id = t3.id
order by 2, 1
Вот DEMO
Или, может быть, вы хотели что-то вроде этого:
select
t1.id,
t1.name
from test t1
where t1.name in (select t2.name
from test t2
where t2.id = t1.id)
order by 1, 2;
Если ни один из вышеперечисленных подходов вам не поможет (это не то, что вы хотели), то есть другой путь. Вы можете «включить» LATERAl в вашей старой Oracle 11 версии следующим образом:
alter session set events '22829 trace name context forever';
Видите ли, эта опция / функция существовала в более старых версиях, но не была «включена». Здесь приведен пример DEMO , показывающий, что ваш оператор в данных примера сначала показывает ошибку, а затем после этой команды alter session
работает.
Если вы хотите запрос, который даст вам resul, как в вашем вопросе и будет работать на 11g, то вы можете использовать это:
select ID, Length, LAG(ACUM) OVER (order by ID) sum
from (SELECT ID
, length
, Sum(length) OVER (ORDER BY id) as ACUM
FROM Table1
group by ID, length)
И то же самое можно сделать «более простым» способом:
SELECT id,
length,
(SELECT Sum(length)
FROM Table1 b
WHERE a.id > b.id) ACUM
FROM Table1 a
Вот демонстрационная версия , в которой этот запрос возвращает те же результаты.
Надеюсь, это поможет.