Я пытаюсь создать CTE с Oracle 10g и, к сожалению, получаю следующую ошибку
ORA-32031: недопустимая ссылка на имя запроса в предложении WITH
Есть ли способ решить или альтернативное решение, чтобы оно работало? (К сожалению, я должен использовать старую версию)
Борьба с исключением, и после нескольких часов попыток исследования, похоже, проблема управления версиями, которая означает, что CTE не поддерживается в версии I Я работаю с. Я не уверен, но когда я попробовал запрос в SQL Server 2008, он работал просто отлично. Это проверенный запрос:
with Q1 as
(
select m.id, m.value, row_number() over (partition by id order by storedate) as n
from sample_test_2020 m
),
Q2 as
(
select Q1.id, value as s, n as m, lpad(n, 3, '0') as p
from Q1
where value <= 8
union all
select Q1.id, Q1.value + s as s, Q1.n as m, Q2.p || ',' || lpad(Q1.n, 3, '0') as p
from Q1
inner join Q2 on Q2.id = Q1.id and Q1.n > Q2.m and Q1.value + s <= 8
),
Q3 as
(
select id, min(p) as p
from Q2
where s = 8
group by id
)
select * from Q3;
Ожидаемый результат :
ID P
1122 001,004
4466 001,004
Таблица :
CREATE TABLE SAMPLE_TEST_2020
(
ID VARCHAR2(20 BYTE)
, STOREDATE DATE
, VALUE NUMBER
, INFO VARCHAR2(20 BYTE)
)
Пример ввода :
ID STOREDATE VALUE INFO
4466 01-JAN-20 2 DONE
4466 02-JAN-20 2 DONE
4466 03-JAN-20 2 DONE
4466 04-JAN-20 6 DONE
1122 01-JAN-20 2 DONE
1122 02-JAN-20 2 DONE
1122 03-JAN-20 2 DONE
1122 04-JAN-20 6 DONE
Для справки, которая работала на SQL сервере, вот рабочее решение - Рабочий пример