2012-03-06 9 views
5

मैं इस तालिकाऑरैकल में दो बार से अधिक होने वाले रिकॉर्ड पुनर्प्राप्त कैसे करें?

create table student (
    stu_id int, 
    s_name nvarchar(max), 
    s_subject nvarchar(max), 
) 

है और इस रूप में डेटा

insert into student values(123,'pammy','English'); 
insert into student values(123,'pammy','Maths'); 
insert into student values(123,'pammy','Chemistry'); 
insert into student values(124,'watts','Biology'); 
insert into student values(125,'Tom','Physics'); 
insert into student values(125,'Tom','Computer'; 
insert into student values(125,'Tom','ED'; 

तो मैं रिकॉर्ड जो दो बार से अधिक हो गई है पुनः प्राप्त करना चाहता था। मेरा कोड

select stu_id,s_Name 
from student 
group by stu_id,s_Name 
having count(stu_id) >2 ; 

परिणाम सही था।

लेकिन जब मैं s_subject चाहता हूं तो यह भी कहता है कि कोई पंक्ति चयनित नहीं है। मुझे नहीं पता क्यों।

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) >2 ; 
+2

आप सही, केवल चुनिंदा विषय में करना चाहते हैं? एक डुप्लिकेशन केवल तभी होता है जब stu_id, s_Name डुप्लिकेट हो, है ना? यदि हां, तो आप किस विषय को प्राप्त करना चाहते हैं? एक से अधिक हैं ... –

उत्तर

19

ऐसा इसलिए है क्योंकि आपके किसी भी छात्र के पास प्रति विषय एक से अधिक रिकॉर्ड नहीं हैं।

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) >2 ; 

इस कोड को रिकॉर्ड है कि हो के लिए पूछता है दो बार है कि एक ही छात्र पहचान पत्र, नाम और विषय से अधिक है। आपके नमूने में से कोई भी रिकॉर्ड इसे पूरा नहीं करता है।

यदि, वास्तव में, आप जो चाहते हैं वह आईडी, नाम और दो से अधिक कक्षाएं ले रहे किसी भी छात्र के विषय हैं, यह काफी आसानी से पूरा हो सकता है।

select stu_id, name, subject 
from student 
where stu_id in ( select stu_id 
        from student 
        group by stu_id 
        having count(stu_id) >2); 

आशा इस मदद करता है:

एक फिल्टर के रूप में अपने प्रारंभिक एसक्यूएल का एक थोड़ा संशोधित संस्करण का उपयोग करना, हम इस मिलता है।

+0

वास्तव में IN I का उपयोग करने के बजाय subquery का उपयोग कर रहा था जो 1 से अधिक पंक्ति लौटाया। धन्यवाद। –

0

जैसा कि आप तालिका में सभी स्तंभों के समूह में समूह कर रहे हैं, यह अद्वितीय पंक्तियां उत्पन्न करेगा (एक आवृत्ति पंक्ति के साथ रिकॉर्ड)। जैसा कि आप पहले से ही पंक्तियों को 2 से अधिक चुनते हैं, इसमें आवृत्ति के साथ रिकॉर्ड नहीं होंगे 2. यदि आप गिनती = 1 के साथ क्या होगा, आप गिनती के साथ सभी पंक्तियों मिल जाएगा = 1,

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) =1 ; 

उत्पादन होगा:

stu_id  s_Name  s_subject 
    ----------- ------------- 
123   pammy  Chemistry 
123   pammy  English 
123   pammy  Maths 
124   watts  Biology 
125   Tom   Computer 
125   Tom   ED 
125   Tom   Physics 
संबंधित मुद्दे