0
我有一個包含數千條記錄的processDependency表。樣本記錄給出如下:以下情況下的SQL查詢
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以,當我運行SQL查詢我應該能夠如下推導:
- P1-P2-P3-P4-P5
P6,P7
任何人都可以幫助我與一般的SQL。
我有一個包含數千條記錄的processDependency表。樣本記錄給出如下:以下情況下的SQL查詢
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以,當我運行SQL查詢我應該能夠如下推導:
P6,P7
任何人都可以幫助我與一般的SQL。
這是不完全正確,因爲它會從PROC
所有路徑,但你並沒有明確哪一個應該首先使用。
無論如何它應該給你一個想法。
SELECT recurse AS
(
SELECT Proc AS Start,
Proc||COALESCE('-'||DepProc,'') AS PATH,
DepProc as Next, 1 as Level
FROM table
UNION ALL
SELECT Start,
PATH||'-'||t.DepProc,
t.DepProc as Next,
Level+1 as Level
FROM recurse r
JOIN table t ON r.Next = t.Proc
), recurseWithMax AS
(
SELECT PATH, Start, MAX(Level) OVER (Partition by Start) as Max, Level
)
SELECT Start, PATH
FROM recurseWithMax
WHERE Level = Max
非常感謝@Hogan,它調整了CTE查詢後的工作。您的回答非常有幫助。 –
標記正在使用的dbms –
我不相信你可以有無限深度的層次處理的通用查詢。您將需要使用RDBMS特定的功能。 –
所以,如果我們有一個明確的深度說例如12 ..那麼有可能嗎? –