How do I iterate through hierarchical data in a Sql Server 2005 stored proc? -
मेरे पास निम्न के जैसा एक SqlServer2005 तालिका "समूह" है:
Id (पीके , Int) नाम (varchar (50)) parentId (int)
जहां ParentId समूह तालिका में दूसरे आईडी को संदर्भित करता है। इसका उपयोग पदानुक्रमित समूहों को मॉडल करने के लिए किया जाता है जैसे:
समूह 1 (आईडी = 1, पैरेंटिड = नल) + - समूह 2 (आईडी = 2, पैरेंटिड = 1) + - समूह 3 (आईडी = 3, पैरेंटिड = 1) + - समूह 4 (आईडी = 4, पैरेंटिड = 3) समूह 5 (आईडी = 5, पैरेंटिड = शून्य) + - समूह 6 (आईडी = 6, पैरेंटिड = 5) आपको तस्वीर मिलती है
मेरे पास एक और मेज है, सरलीकरण के लिए इसे "डेटा" कहते हैं, जो कुछ ऐसा दिखता है:
< कोड> आईडी (पीके, आईटी) कुंजी (वर्चार) वैल्यू (वर्चार) ग्रुपआईडी (एफके, इंट)
अब, मैं एक संग्रहीत प्रक्रिया लिखने की कोशिश कर रहा हूं जो मुझे "डेटा प्राप्त कर सकता है "किसी दिए गए समूह के लिए उदाहरण के लिए, यदि मैं समूह 1 के लिए क्वेरी करता हूं, तो मुझे डेटा से कुंजी-मान-जोड़े देता है जहां समूह आईडी = 1. यदि मैं समूह 2 के लिए क्वेरी करता हूं, तो यह समूह आईआईडी = 1 के लिए केवीपी वापस देता है, उसके बाद उन लोगों के साथ मिलते हैं जिनके पास groupId = 2 (और डुप्लिकेट वाली कुंजियां बदल दी जाती हैं)।
आदर्श रूप से, यदि एक चक्र (अर्थात समूह 1 का मूल समूह 2 और समूह 2 का मूल समूह 1 है) आदर्श रूप से भी प्रभावित हो जाता है
क्या किसी को इस तरह के स्प्रेक लिखने का अनुभव है, या यह कैसे पूरा किया जा सकता है?
धन्यवाद लोग, बहुत सराहना करते हैं,
एलेक्स
यह पुनरावर्ती प्रश्नों और सीटीई
का उपयोग करके पूरा किया जा सकता है; के रूप में कुंजी वैल्यू (SELECT G.Id, जी। नोम, डी। के, डी। वेल, 0 एएस लेवल से ग्रुप जी छोड़ें डेटा डी पर जी आईआईडी = डी। ग्रुपआईड जहां जी.आईडी = @ your_top_level_root यूनिऑन्स सभी का चयन जी.आई.डी., जी। नोम, डी। कुंजी, डी। वेल, के.लिवल + 1 से कीवाल्यू के जोन ग्रुप जी ऑन जी। पेंटरआईडी = के.आईड लेफ्ट जॉइंट डाटा ऑन ऑन जी.आईडी = डी। ग्रुपआईडी) का चयन करें केविन वेल्यू से
Comments
Post a Comment