ओरेकल विशिष्ट मर्ज डुप्लिकेट का चयन करें [डुप्लिकेट]
मेरे डेटाबेस में एक सरल तालिका है जो इस तरह दिखती है
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
जैसा कि आप देख सकते हैं कि डेटा सबसे अच्छा नहीं है और अलग-अलग श्रेणी_ के साथ डुप्लिकेट श्रेणियां हैं। मेरा लक्ष्य एक परिणाम प्राप्त करना है जहां प्रत्येक श्रेणी एक बार होती है और यदि एक ही श्रेणी के नाम के लिए कई आईडी हैं तो उन्हें मर्ज करें (अल्पविराम से अलग या sth। उस तरह)। उदाहरण के लिए, परिणाम इस तरह दिखना चाहिए
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
मैं उस परिणाम को कैसे संग्रहीत कर सकता हूं। मेरी वर्तमान क्वेरी इस तरह दिखती है
select distinct category, category_id
from my_table
order by 1;
मुझे बिल्कुल पता नहीं है कि एक अलग बयान के साथ इस तरह के मर्ज को कैसे संग्रहीत किया जाए। क्या अलग-अलग कथन सही दृष्टिकोण है या मुझे दूसरे का उपयोग करना चाहिए?
जवाब
सही कहा; एक श्रेणी आईडी को एक श्रेणी का प्रतिनिधित्व करना चाहिए, इसलिए ऐसी तालिका में दो बार (दो अलग-अलग आईडी के साथ) एक ही श्रेणी नहीं होनी चाहिए। तालिका में श्रेणी में एक अद्वितीय बाधा का अभाव है।
आप अलग-अलग प्रतिनिधित्व किए गए डेटा को देखना चाहते हैं, जिसे आप एकत्रीकरण के साथ प्राप्त कर सकते हैं:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
उपयोग करें group by
और listagg
पसंद करें
select category, listagg(category_id, ',') category_id
from my_table
group by category
बेला देखना