2017-05-04 94 views
0

我目前正在導出查詢從Oracle到PostgreSQL,和我被困在這一個是用來目錄排序:PostgreSQL的:按名稱順序多層次結構後排序

WITH RECURSIVE R AS (
    SELECT ARRAY[ID] AS H 
     ,ID 
     ,PARENTID 
     ,NAME 
     ,1 AS level 
    FROM REPERTORIES 
    WHERE ID= (SELECT Min(ID) FROM REPERTORIES) 

    UNION ALL 
    SELECT R.H || A.ID 
     ,A.ID 
     ,A.PARENTID 
     ,A.NAME 
     ,R.level + 1 
    FROM REPERTORIES A 
    JOIN R ON A.PARENTID = R.ID 
    ) 
SELECT NAME 
     ,ID 
     ,PARENTID 
     , level 
FROM R 
    ORDER BY H 

它的部分工作,每個子目錄都放在他的父目錄或共享相同父目錄的目錄之後(一個目錄可以有子目錄,子目錄也有子目錄等等)

但我還需要排序處於同一級別的目錄他們的名字(當然,他們的子目錄在他們的旁邊)

我該如何做到這一點?

在此先感謝(如果我的英語又硬又遺憾地理解)

編輯:這裏是orignial Oracle查詢:

SELECT NAME, ID, PARENTID, level 
FROM REPERTORIES 
CONNECT BY PRIOR ID = PARENTID 
START WITH ID = (SELECT Min(ID) FROM REPERTORIES) 
ORDER SIBLINGS BY NAME 

回答

0

「順序由H」是扔我一個循環,但是.. 一般來說,您需要在查詢的遞歸部分進行排序,以保持它們正確分組。

WITH RECURSIVE R AS (
    SELECT ARRAY[ID] AS H 
     ,ID 
     ,PARENTID 
     ,NAME 
     ,1 AS level 
    FROM REPERTORIES 
    WHERE ID= (SELECT Min(ID) FROM REPERTORIES) 

    UNION ALL 
    SELECT R.H || A.ID 
     ,A.ID 
     ,A.PARENTID 
     ,A.NAME 
     ,R.level + 1 
    FROM REPERTORIES A 
    JOIN R ON A.PARENTID = R.ID 
    order by name 
    ) 
SELECT NAME 
     ,ID 
     ,PARENTID 
     , level 
FROM R 
+1

它說我「在遞歸查詢ORDER BY沒有植入」,我試圖這樣做:/ – Dryster

1

你構建h,構建包含由路徑名稱和順序的排列方式相似。

+0

Thnks,我要試試這個! – Dryster