0
我遇到了Oracle中的遞歸查詢問題。SQL遞歸查詢(Oracle)
我目前能夠通過在SQL Server中使用CTE獲得結果,但我必須修改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。
這樣做的結果是 「選擇......」 是(探微個例)
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