लेवल कॉलम सिम्युलेट करना
स्तर कॉलम को पुनरावर्ती भाग में काउंटर को बढ़ाकर आसानी से सिम्युलेटेड किया जा सकता है:
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 सर्वर में भी काम नहीं करता है।