Oracle sélectionne des doublons de fusion distincts [dupliquer]
J'ai une table simple dans ma base de données qui ressemble à ceci
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
Comme vous pouvez le voir, les données ne sont pas les meilleures et il existe des catégories en double avec différents category_ids. Mon objectif est d'obtenir un résultat où chaque catégorie se produit une fois et s'il y a plusieurs identifiants pour le même nom de catégorie, fusionnez-les (séparés par des virgules ou qc comme ça). Donc, pour l'exemple, le résultat devrait ressembler à ceci
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
Comment puis-je archiver ce résultat. Ma requête actuelle ressemble à ceci
select distinct category, category_id
from my_table
order by 1;
Je ne sais absolument pas comment archiver ce genre de fusion avec une déclaration distincte. L'énoncé distinct est-il la bonne approche ou devrais-je en utiliser une autre?
Réponses
Vous avez raison; un identifiant de catégorie doit représenter une catégorie, de sorte qu'un tel tableau ne doit pas contenir la même catégorie deux fois (avec deux identifiants différents). Le tableau n'a pas de contrainte unique sur la catégorie.
Vous voulez voir les données représentées différemment, ce que vous pouvez obtenir avec l'agrégation:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
Utiliser group by
et listagg
aimer
select category, listagg(category_id, ',') category_id
from my_table
group by category
voir violon