Oracle wählt verschiedene Zusammenführungsduplikate aus [Duplikat]

Dec 01 2020

Ich habe eine einfache Tabelle in meiner Datenbank, die so aussieht

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+

Wie Sie sehen, sind die Daten nicht die besten und es gibt doppelte Kategorien mit unterschiedlichen category_ids. Mein Ziel ist es, ein Ergebnis zu erzielen, bei dem jede Kategorie einmal vorkommt und wenn es mehrere IDs für denselben Kategorienamen gibt, diese zusammenzuführen (durch Kommas getrennt oder so). Für das Beispiel sollte das Ergebnis also so aussehen

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+

Wie kann ich dieses Ergebnis archivieren? Meine aktuelle Anfrage sieht so aus

select distinct category, category_id 
from my_table
order by 1;

Ich habe absolut keine Ahnung, wie ich diese Art der Verschmelzung mit einer eindeutigen Aussage archivieren soll. Ist die eindeutige Aussage der richtige Ansatz oder sollte ich einen anderen verwenden?

Antworten

2 ThorstenKettner Dec 01 2020 at 16:13

Du hast recht; Eine Kategorie-ID sollte eine Kategorie darstellen, daher sollte eine solche Tabelle nicht zweimal dieselbe Kategorie enthalten (mit zwei verschiedenen IDs). Der Tabelle fehlt eine eindeutige Einschränkung für die Kategorie.

Sie möchten, dass die Daten unterschiedlich dargestellt werden, was Sie mit der Aggregation erreichen können:

select
  category,
  listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
1 Dornaut Dec 01 2020 at 16:13

Verwenden group byund listaggmögen

select category, listagg(category_id, ',') category_id
from my_table
group by category

siehe Geige