Bonjour,
je cherche à faire une requête dont la sortie permettrait d'afficher des éléments d'une collection de type VARCHAR2 groupés sur une même ligne.
Prenons un exemple simple, ça sera plus clair:
Si on a 2 tables :
Employe (id_employe, nom_employe) et JourDePresence (id_jour, libelle_jour, id_employe)
Le but de la requête est d'afficher la liste des employés avec leurs jours de présence, on fait donc:
Code :
- Select nom_employe, libelle_jour
- from Employe emp , JourDePresence jour
- where emp.id_employe= jour.id_employe;
|
Et cela nous donne quelque chose qui ressemble à ça :
nom_employe | libelle_jour
-----------------------------
Employé 1 | Lundi
Employé 1 | Mardi
Employé 2 | Mardi
Employé 2 | Mercredi
Employé 2 | Jeudi
etc...
Jusque là rien de plus simple.
Mais dans mon cas, la requête renvoi un très grand nombre d'employés, or si on multiplie par le nombre de jours de présence, cela fait un fichier de sortie énorme et donc difficile à consulter. J'aimerais donc arriver à présenter la sortie sous la forme suivante :
nom_employe | jours
--------------------------------
Employé 1 | Lundi Mardi
Employé 2 | Mardi Mercredi Jeudi
etc...
En gros cela revient à faire un GROUP BY nom_employe, mais au lieu de faire un simple comptage des lignes groupées comme on pourrait le faire avec un COUNT, il faudrait arriver à concaténer les éléments de la colonne "libelle_jour" pour les afficher en face de chaque nom d'employé. Ceci aurait pour effet de limiter grandement le nombre de ligne en sortie et donc d'alléger le ficher de sortie.
Cela dit, je ne sais même pas si c'est possible, car cela revient à mettre plusieurs éléments dans une même "case" d'une colonne, et je ne sais pas si SQL le permet. Mais je me dis que comme les éléments sont de type VARCHAR, il y a peut-être moyen de les concaténer en ajoutant un espace de séparation. Mais je n'ai pas trouvé de fonction simple (comme le COUNT pour compter les lignes groupées) qui permette cet affichage, donc il y a 2 solutions :
1 - Cette fonction existe, et on pourra dire que je ne sais pas chercher.
2 - Il faut contourner le problème, et là je sèche complètement.
Dans tout les cas merci d'avance pour vos conseils et idées.
PS : pour info, la sortie se fait simplement par le spool sous la forme de fichiers CSV