Oracle sélectionne des doublons de fusion distincts [dupliquer]

Dec 01 2020

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

2 ThorstenKettner Dec 01 2020 at 16:13

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;
1 Dornaut Dec 01 2020 at 16:13

Utiliser group byet listaggaimer

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

voir violon