sql - Return all groups that have exactly the same employees -


इसमें 2 तालिकाओं हैं:

  कर्मचारी (आईडी_ कर्मचारी, कार्यकर्ता_नाव) समूह (आईडी_ कर्मचारी, समूह_नाम) )   

यहाँ आपके लिए निर्माण स्क्रिप्ट है:

  बनाओ टेबल कर्मचारी (id_employee int identity (1,1) नल कन्स्ट्रेंट PK_Employee प्राथमिक कुंजी क्लास्टर, वर्क_नाम Nvarchar (100) कॉन्ट्रैक्ट UQ_Employee_worker_name UNIQUE); टेबल समूह बनाएं (id_employee int null violation FK_Groups_id_employee विदेशी कुंजी संदर्भ कर्मचारी (id_employee), group_name varchar (10) नहीं, कंसल्टेंट PK_Groups प्राथमिक कुंजी क्लास्टर (group_name, id_employee)); INSERT कर्मचारी का चयन 'कार्यकर्ता 1' संघ सभी का चयन करें 'कार्यकर्ता 2' संघ सभी का चयन करें 'कार्यकर्ता 3' यूनियन सभी का चयन करें 'कार्यकर्ता 4'; INSERT समूह का चयन 1, 'ए 1' यूनियन सब सेलेक्ट 2, 'ए 1' यूनियन ऑल ऑब्जेक्ट 3, 'ए 2' यूनियन ऑल सब्स 4, 'ए 2' यूनियन सब सेलेक्ट 1, 'बी 1' यूनियन सर्व का चयन 2, 'बी 1' यूनियन ऑल चुनें 3, 'बी 2' यूनियन सब सेलेक्ट 4, 'बी 2' यूनियन सब सेलेक्ट 2, 'बी 3' यूनियन ऑल सब्स 3, 'बी 3' यूनियन सर्व का चयन 4, 'बी 3';   

मुझे एक प्रश्न पूछने की ज़रूरत है कि किसी दिए गए id_group के लिए सभी अन्य समूह वापस लौटाएंगे जिनके पास वही कर्मचारी हैं।

उदाहरण के लिए: < / P>

  का चयन करें 'a1'   

- & gt; 'बी 1' लौटना चाहिए क्योंकि दोनों समूहों में ये हैं: कार्यकर्ता 1 & amp; कार्यकर्ता 2

  का चयन करें 'a2'   

- & gt; 'बी 2' लौटना चाहिए क्योंकि दोनों समूहों में ये हैं: कार्यकर्ता 3 & amp; कार्यकर्ता 4

ध्यान दें कि समूहों को वही होना चाहिए, a1 के सभी सदस्यों को b1 में होना चाहिए और दोनों समूहों का आकार होना चाहिए वैसे भी।

आप काम करने के लिए SQL सेट ऑपरेशन का उपयोग कर सकते हैं। यह विचार समूहों के भीतर कर्मचारियों को मिलाना है और समूह में योगों की गणना करना है।

  से others.group_name चुनें (चुनें g। *, Count (*) ओवर (group_name द्वारा विभाजन) के रूप में समूहों के समूह से जी संख्या जहां group_name & lt; & gt; @group) अन्य बाहरी छोड़ दिया (समूह का नाम, group_name = @group) से others.id_employee = Thegroup.id_employee और others.numemps = thegroup.numemps समूह द्वारा others.group_name गिनती (*) = अधिकतम (thegroup.numemps) और अधिकतम (मामले जब thegroup.id_employee शून्य है तो 1 और 0 अंत) होने = = 0   

तो, यह क्वेरी दुनिया को दो में विभाजित करती है। । । आपके समूह और अन्य सभी समूह यह तब उन समूहों द्वारा नाम और समुच्चय के द्वारा मेल खाता है। एकमात्र उम्मीदवार समूह ही एक ही संख्या में कर्मचारी हैं।

होने वाले समूह उन समूहों को चुनते हैं जो मैच करते हैं। इसका अर्थ है कि दूसरे समूह में हर नाम उस समूह में एक नाम से मेल खाता है जिसे आप परवाह करते हैं। चूंकि समूहों के आकार समान हैं, और आपके समूह का प्रत्येक नाम मेल खाता है, इसलिए समूह में एक ही कर्मचारी हैं।

Comments