2010-07-16 19 views
9

जगह चलो कहते हैं कि मैं निम्नलिखित डेटाबेस तालिकाजबकि शून्य मान

Name | Nickname | ID 
---------------------- 
Joe Joey  14 
Joe null  14 

मिल गया है अब मैं एक का चयन करें बयान कि जब शून्य मान की जगह एक के लिए इन दो कॉलम विलीन हो जाती है क्या करना चाहते हैं एक के लिए दो पंक्तियों विलय। नतीजा इस तरह दिखना चाहिए:

Joe, Joey, 14 

कौन सा एसक्यूएल स्टेटमेंट इसका प्रबंधन करता है (यदि यह भी संभव है)?

+1

परिणाम वास्तव में "जोस" या "जो" होना चाहिए? – ninesided

+0

क्षमा करें, मेरी गलती। फिक्स्ड। –

+0

आप किस पंक्ति से पंक्तियों को मर्ज करते हैं? उदाहरण के लिए, यदि आपके पास तीसरी पंक्ति XXX होगी, शून्य, 10. आपकी क्वेरी वापस क्या होनी चाहिए? –

उत्तर

0

AFAIK, प्रश्न स्पष्ट नहीं है। इसलिए मैं यहां कुछ मान्यताओं को बना रहा हूं। आपके आउटपुट में पंक्तियों दोनों के लिए पहला और तीसरा कॉलम है। केवल दूसरा फ़ील्ड अलग है।

तो यू बस एक का चयन करें खोज

select one.name,two.nick_name,one.id from 
(select name,id from your_tb group by name,id) one, 
your_tb two 
where two.nickname is not NULL 
and two.name=one.name 
and two.id=one.id; 

बारे में हो सकता है हम धुन कर सकते हैं कर सकते हैं, लेकिन मैं इस ट्यूनिंग एसक्यूएल squeries में अच्छा नहीं हूँ, लेकिन इस तरह से मैं लगता है यू की जरूरत है।

11

सरल समाधान:

SQL> select * from t69 
    2/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Joe       14 
Michael      15 
      Mick    15 
      Mickey    15 

SQL> select max(name) as name 
    2   , max(nickname) as nickname 
    3   , id 
    4 from t69 
    5 group by id 
    6/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Michael Mickey    15 

SQL> 

आप 11gR2 है, तो आप the new-fangled LISTAGG() function इस्तेमाल कर सकते हैं लेकिन अन्यथा यह काफी सरल एक का चयन करें जो नाम और उपनाम कॉलम concatenates में ऊपर बयान रैप करने के लिए है।

+1

शानदार उत्तर – Mukus

संबंधित मुद्दे