У меня проблема с рекурсивным запросом в Oracle.SQL-рекурсивный запрос (Oracle)
В настоящее время я могу получить результат с помощью CTE в SQL Server, но мне нужно адаптировать код для Oracle.
код я использую
WITH n(portefeuille, client, level, opcvm, ca, iter) AS
(
SELECT
portefeuille, client, 0 as level, opcvm, ca,
CAST(',' + CAST(portefeuille AS varchar) + ',' AS varchar) AS iter
FROM
dbo.chiffres
WHERE
opcvm IS NULL
UNION ALL
SELECT
m.portefeuille, n.client, n.level+1, m.opcvm, m.ca + n.ca,
CAST(iter + CAST(m.portefeuille AS varchar) + ',' AS varchar) AS iter
FROM
dbo.chiffres AS m
INNER JOIN
n ON n.portefeuille = m.opcvm
)
SELECT DISTINCT
n.level, n.client, n.portefeuille, n.ca , n.opcvm, iter,
(SELECT COUNT(*)
FROM n T1
WHERE T1.iter LIKE '%,' + CAST(n.portefeuille AS varchar) + ',%') - 1 AS Subordinates
FROM
n, dbo.chiffres c
WHERE
((SELECT COUNT(*)
FROM n T1
WHERE T1.iter LIKE '%,' + CAST(n.portefeuille AS varchar) + ',%') - 1) = 0
ORDER BY
level
Я думаю, что я должен использовать «соединение по» в оракула, но я не знаю, как его использовать.
Фактически, в моем окончательном коде я использовал «select .....» вместо таблицы dbo.chiffres.
В результате этого "выбрать ...." есть (Juste в Exemple)
Client | portefeuille | CA | OPCVM
31054 | 024 | 140 | NULL
104900 | 034 |200 | 024
31054 | 006 | 10 | NULL
И конечный результат, что я хочу это
level | Client | portefeuille | CA | iter | subordinates
0 | 31054 | 034 | 340 | ,024,034, |0
1 | 31054 | 006 | 10 | ,006, |0
CTE работают в Oracle (это называется предложением факторинга подзапроса в документации) - вы должны легко переносить его. Переименовать 'level' в' lvl' - 'level' - это ключевое слово, используемое в иерархических запросах и не может использоваться как псевдоним. – MT0
Благодарим вас за ответ. Я думаю, что я пробовал это решение, но получил сообщение об ошибке «Отсутствие ключевого слова SELECT». На самом деле моя проблема немного сложнее, потому что у меня нет таблицы dbo.chiffres, но вместо этого выберите «select ...». Может ли это быть источником проблемы? – Lamia
Я добавил некоторые детали к своему сообщению, чтобы объяснить больше моей проблемы. – Lamia