Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL Server odpowiednik Oracle „CONNECT BY PRIOR” i „ORDER SIBLINGS BY”

Symulowanie kolumny LEVEL

Kolumnę poziomu można łatwo zasymulować, zwiększając licznik w części rekurencyjnej:

WITH tree (empid, name, level) AS  (
  SELECT empid, name, 1 as level
  FROM emp
  WHERE name = 'Joan'

  UNION ALL

  SELECT child.empid, child.name, parent.level + 1
  FROM emp as child
    JOIN tree parent on parent.empid = child.mgrid
)
SELECT name 
FROM tree;

Symulowanie order siblings by

Symulacja order siblings by jest nieco bardziej skomplikowana. Zakładając, że mamy kolumnę sort_order która definiuje kolejność elementów na rodzica (nie ogólną kolejność sortowania - ponieważ wtedy order siblings nie byłoby konieczne), wtedy możemy utworzyć kolumnę, która da nam ogólną kolejność sortowania:

WITH tree (empid, name, level, sort_path) AS  (
  SELECT empid, name, 1 as level, 
         cast('/' + right('000000' + CONVERT(varchar, sort_order), 6) as varchar(max))
  FROM emp
  WHERE name = 'Joan'

  UNION ALL

  SELECT child.empid, child.name, parent.level + 1, 
         parent.sort_path + '/' + right('000000' + CONVERT(varchar, child.sort_order), 6) 
  FROM emp as child
    JOIN tree parent on parent.empid = child.mgrid
)
SELECT * 
FROM tree
order by sort_path;

Wyrażenie dla sort_path wygląda na tak skomplikowaną, ponieważ SQL Server (przynajmniej wersja, której używasz) nie ma prostej funkcji formatowania liczby z wiodącymi zerami. W Postgresie użyłbym tablicy liczb całkowitych, aby konwersja do varchar nie jest konieczne - ale to też nie działa w SQL Server.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchom, aby wyświetlić wiadomość za pomocą PL/SQL

  2. Jak wstawić obrazek do kolumny BLOB w tabeli Oracle przy użyciu składni INSERT?

  3. SQL Join na wartościach null

  4. Wiele zestawów wyników z Oracle

  5. Jak mogę testować jednocześnie pod kątem wartości null i not null w sql?