Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

SQL सर्वर Oracle 'कनेक्ट बाय PRIOR' और 'ORDER SIBLINGS BY' के समतुल्य

लेवल कॉलम सिम्युलेट करना

स्तर कॉलम को पुनरावर्ती भाग में काउंटर को बढ़ाकर आसानी से सिम्युलेटेड किया जा सकता है:

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;

सिम्युलेट करना

भाई-बहनों को इसके आधार पर क्रमित करना थोड़ा अधिक जटिल है। मान लें कि हमारे पास एक कॉलम है sort_order जो प्रति माता-पिता तत्वों के क्रम को परिभाषित करता है (समग्र क्रम क्रम नहीं - क्योंकि तब आदेश भाई-बहन आवश्यक नहीं होगा) तो हम एक कॉलम बना सकते हैं जो हमें एक समग्र सॉर्ट ऑर्डर देता है:

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;

sort_path . के लिए व्यंजक इतना जटिल लग रहा है क्योंकि SQL सर्वर (कम से कम आपके द्वारा उपयोग किया जा रहा संस्करण) में प्रमुख शून्य वाली संख्या को प्रारूपित करने के लिए एक सरल कार्य नहीं है। पोस्टग्रेज में मैं एक पूर्णांक सरणी का उपयोग करूंगा ताकि रूपांतरण varchar . हो सके आवश्यक नहीं है - लेकिन यह SQL सर्वर में भी काम नहीं करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल रेगेक्स में कभी-कभी गैर लालची क्वांटिफायर क्यों काम नहीं करता है?

  2. वेब साइट डाउन और ट्विटर फीड

  3. सी#में DBMS_OUTPUT.GET_LINES से आउटपुट बफर प्राप्त करना

  4. आप सहयोगी, संस्करण-नियंत्रित वातावरण में Oracle पैकेज पर कैसे काम करते हैं?

  5. Oracle डेटाबेस - ORA-01460 - अनुपयुक्त या अनुचित रूपांतरण का अनुरोध किया गया