db2實現遞歸調用 機構等樹形數據結構形成
WITH n(lev,ID, NAME, PORGID, ORG_ID_TREE) AS
(SELECT 0,ID, NAME, PORGID, CAST(ID AS VARCHAR(1024))
FROM CPM_GDSBA
WHERE ID = ‘00001‘
UNION ALL
SELECT n.lev +1, nplus1.ID, nplus1.NAME, nplus1.PORGID, n.ORG_ID_TREE || ‘,‘ || nplus1.ID
FROM CPM_GDSBA as nplus1, n
WHERE n.ID = nplus1.PORGID)
SELECT lev as LEVEL,ID, NAME, PORGID, ORG_ID_TREE FROM n
其中,n代表第一次查詢結果,即根數據,然後遞歸往下找父為該數據的記錄,在遞歸過程中ORG_ID_TREE記錄遞歸的路徑,也就是拼接從根一直到當前最後的葉子節點的路徑。
lev代表遞歸的深度,初始值由UNION ALL前面的初始查詢語句決定,後續遞歸動作在n.lev基礎上加1
這個遞歸對應oracle的CONNECT BY PRIOR關鍵詞,oracle的SYS_CONNECT_BY_PATH關鍵詞對應的 CAST(ID AS VARCHAR(1024))這種形式
更多的解釋可參照:
http://blog.csdn.net/suliqiang/article/details/47746395
https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1010liush/
db2實現遞歸調用 機構等樹形數據結構形成