Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 5
  • 326

Borykam się od pewnego czasu z takim problemem: jak mogę posortować dane w zapytaniu hierarchicznym tak, by nie zniszczyć hierarchiczności tabeli wynikowej?

Jeśli zastosuję klauzulę "ORDER BY", to ona niszczy hierarchiczność tabeli wynikowej. Jak można ten problem obejść?

Adam_Gesing
  • Zapytał
  • @ Adam_Gesing | 02.06.2014
    • laureat
    • 15
    • 6
    • 52

Odpowiedzi (2)

  • 17

Primo, wynikiem zapytania jest result set (zbiór wynikowy/raport), a nie tabela.

Secundo, sortowanie wyników nie niszczy hierarchii, a jedynie zmienia formę jej reprezentacji graficznej.

Tertio, problem jest sprzeczny logicznie. Serwer zwraca wyniki w porządku hierarchicznym albo w porządku ustalanym przy pomocy klauzuli ORDER BY. Jeśli te porządki są sprzeczne, nie ma możliwości wyświetlenia wyników jednocześnie w/g obu porządków. Można to zrobić w dwóch osobnych raportach lub ewentualnie zastosować klauzulę ORDER BY w połączeniu z generowaniem ścieżek do poszczególnych elementów w hierarchii przy pomocy funkcji SYS_CONNECT_BY_PATH.

  • Odpowiedział
  • @ | 02.06.2014
  • TRENER MODERATOR ALTKOM AKADEMII
  • 10

Do sortowania wyniku zapytania hierarchicznego nie powinno się stosować klauzuli ORDER BY, ponieważ zniszczy ona hierarchiczność tabeli wynikowej. Aby przeprowadzić sortowanie i zachować hierarchiczność tabeli wynikowej, należy zastosować klauzulę ORDER SIBLINGS BY, która sortuje rodzeństwo tego samego rodzica.

Przykład:

SELECT employee_id, last_name, manager_id

FROM employees

WHERE employee_id <= 111

START WITH employee_id = 100

CONNECT BY PRIOR employee_id = manager_id

ORDER SIBLINGS BY last_name;

 

EMPLOYEE_ID     LAST_NAME      `MANAGER_ID

100  King  

102 De Haan 100

103  Hunold  102

105 Austin 103

104 Ernst 103

107 Lorentz 103

106 Pataballa 103

101 Kochhar 100

108  Greenberg  101

110 Chen 108

109 Faviet 108

111 Sciarra 108

Wojciech_Sieczkowski
  • Odpowiedział
  • @ Wojciech_Sieczkowski | 03.06.2014
    • 1
    • 2
    • 4
Komentarze
Dzięki przetestuję i dam znać.
Skomentował : @ Adam_Gesing ,03.06.2014
  • 15
  • 6
  • 52