J'ai une table comme celle-ci (rapport)
--------------------------------------------------
| user_id | Department | Position | Record_id |
--------------------------------------------------
| 1 | Science | Professor | 1001 |
| 1 | Maths | | 1002 |
| 1 | History | Teacher | 1003 |
| 2 | Science | Professor | 1004 |
| 2 | Chemistry | Assistant | 1005 |
--------------------------------------------------
J'aimerais avoir le résultat suivant
---------------------------------------------------------
| user_id | Department+Position |
---------------------------------------------------------
| 1 | Science,Professor;Maths, ; History,Teacher |
| 2 | Science, Professor; Chemistry, Assistant |
---------------------------------------------------------
Cela signifie que je dois conserver l'espace vide comme '' comme vous pouvez le voir dans le tableau des résultats. Maintenant, je sais comment utiliser la fonction LISTAGG mais seulement pour une colonne. Cependant, je ne peux pas comprendre exactement comment faire pour deux colonnes en même temps. Voici ma requête:
SELECT user_id, LISTAGG(department, ';') WITHIN GROUP (ORDER BY record_id)
FROM report
Merci d'avance :-)
Cela nécessite simplement une utilisation judicieuse de la concaténation au sein de l'agrégation:
select user_id
, listagg(department || ',' || coalesce(position, ' '), '; ')
within group ( order by record_id )
from report
group by user_id
c'est-à-dire agréger la concatentation de department
avec une virgule et position
et remplacer position
par un espace s'il est NULL.