2016-04-04 147 views
0

我有一個包含數千條記錄的processDependency表。樣本記錄給出如下:以下情況下的SQL查詢

Proc DepProc 
P1 P2 
P2 P3 
P3 P4 
P4 P5 
P6 P7 

所以,當我運行SQL查詢我應該能夠如下推導:

  1. P1-P2-P3-P4-P5
  2. P6,P7

    任何人都可以幫助我與一般的SQL。

+0

標記正在使用的dbms –

+0

我不相信你可以有無限深度的層次處理的通用查詢。您將需要使用RDBMS特定的功能。 –

+0

所以,如果我們有一個明確的深度說例如12 ..那麼有可能嗎? –

回答

1

這是不完全正確,因爲它會從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 
+0

非常感謝@Hogan,它調整了CTE查詢後的工作。您的回答非常有幫助。 –