Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL Server Setara dengan Oracle 'CONNECT BY PRIOR', dan 'ORDER SIBLINGS BY'

Mensimulasikan kolom LEVEL

Kolom level dapat dengan mudah disimulasikan dengan menambahkan penghitung di bagian rekursif:

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;

Mensimulasikan order siblings by

Mensimulasikan order siblings by sedikit lebih rumit. Dengan asumsi kita memiliki kolom sort_order yang mendefinisikan urutan elemen per induk (bukan urutan pengurutan keseluruhan - karena order siblings tidak perlu) maka kita dapat membuat kolom yang memberi kita urutan pengurutan keseluruhan:

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;

Ekspresi untuk sort_path terlihat sangat rumit karena SQL Server (setidaknya versi yang Anda gunakan) tidak memiliki fungsi sederhana untuk memformat angka dengan nol di depan. Di Postgres saya akan menggunakan array integer sehingga konversi ke varchar tidak perlu - tetapi itu juga tidak berfungsi di 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. Bagaimana cara menulis subquery rekursif yang terlibat dalam sqlplus dengan beberapa tabel untuk melacak node?

  2. Bagaimana menjalankan pernyataan Oracle ini di JDBC

  3. Cara melihat hak istimewa apa yang diberikan ke skema pengguna lain

  4. Convert Select Oracle Query To Update untuk skenario tertentu

  5. ORA-00936:oracle ekspresi hilang