2013-02-11 20 views
5

का चयन करें मेरे पास एक नमूना तालिका है।ओरेकल एसक्यूएल अलग

ID  Name   Code  Address 
----+---------------+--------+---------------- 
1 | Sydney Hall | SH | 11 Abc Street 
2 | Sydney Hall | SH | 23 Abc Street 
3 | Main Hall | MH | 74 Xyz Street 
4 | Odyssey Hall | OH | 133 AbZ Street 
5 | Odyssey Hall | OH | 28 Xyx Street 

मैं अलग-अलग प्रविष्टियों के लिए अलग-अलग कोड प्रविष्टियों के साथ-साथ आईडी और नाम चुनना चाहता हूं। उपर्युक्त तालिका के लिए मैं निम्नलिखित प्राप्त करना चाहता हूं (इसलिए मैं भवन के पते को अनदेखा कर रहा हूं)।

ID  Name   Code 
----+---------------+--------+ 
1 | Sydney Hall | SH 
3 | Main Hall | MH 
4 | Odyssey Hall | OH 

यह शायद एक वाम सम्मिलित हों लेकिन मैं इसे एक साथ ठीक से रखा नहीं कर पा रहे (खासकर जब से मैं एक ही मेज से डेटा का चयन कर रहा हूँ)। क्या किसी के बारे में कोई विचार है? धन्यवाद।

+0

कारण है कि आप अलग नाम का उपयोग नहीं कर रहे हैं, कोड तो आंतरिक एक ही मेज –

उत्तर

2
SELECT * 
FROM [table_1] 
WHERE [ID] IN (SELECT Min([ID]) 
       FROM [table_1] 
       GROUP BY CODE 
      ) 
+1

को शामिल होने पूर्ण कोड 'चयन आईडी, नाम, इमारतों से कोड कहां में आईडी (चयन मिन (आईडी है) टीबी_बिल्डिंग ग्रुप बाय कोड से) ' –

0

प्रयास करें: मैं देख रहा हूँ कि हर कोई पहले से ही इस उत्तर दिया है, लेकिन क्यों इतनी जटिल

SELECT ID, Name, Code 
FROM table 
WHERE ID IN (SELECT Max(ID) 
      FROM table 
      GROUP BY Code 
      ) 
0

आप भी इस एक का उपयोग कर सकते हैं?

SELECT 
MIN(ID) ID, 
MIN(NAME) NAME, 
CODE 
FROM TABLE 
GROUP BY CODE 
4

:

SELECT * FROM(
    SELECT 
     ROW_NUMBER() over (partition by NAME, CODE order by NAME, CODE) RNUM, 
     ID, 
     NAME, 
     CODE, 
     ADDRESS 
    FROM YourTABLE 
)x where RNUM=1; 
+0

यह डेटा दिखा सकता है जो मूल रूप से मूल में मौजूद नहीं है डेटा सेट, उदा। यदि MIN (ID) = 1 और MIN (NAME) पंक्ति से डेटा दिखाता है जहां आईडी = 2. –

+0

नमूना डेटासेट के आधार पर यह ठीक है। वास्तविक डेटा के आधार पर, हाँ यह शायद अपर्याप्त है। –

2

दो तरीके हैं जो मैं इसे करने के लिए देखता हूं। एक FIRST कुल फ़ंक्शन (documented here) का उपयोग करना है। वाक्य रचना एक छोटे से भ्रामक है, लेकिन यह काम करना चाहिए

Select 
    MIN(ID) keep (dense_rank first order by id) as id, 
    MIN(NAME) keep (dense_rank first order by id) as name, 
    CODE 
FROM YOUR_TABLE 
GROUP BY CODE 

अन्य वैकल्पिक पद्धति हालांकि मुझे लगता है कि आप से नाम स्तंभ को हटाने की जरूरत है कि मैं सुझाव है ROW_NUMBER समारोह उपयोग कर रहा है के रूप में @techdo ने सुझाव दिया कि इस सवाल का जवाब है और इसके बजाय का उपयोग करें:

SELECT * FROM(
    SELECT 
     ROW_NUMBER() over (partition by CODE order by ID) RNUM, 
     ID, 
     NAME, 
     CODE 
    FROM YOUR_TABLE 
)x where RNUM=1; 
संबंधित मुद्दे