LISTAGG fonction avec deux colonnes
J'ai un tableau comme celui-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 j'ai besoin de préserver l'espace vide ' comme vous pouvez le voir dans le tableau de résultat.
Maintenant, je sais comment utiliser LISTAGG fonction, mais seulement pour une colonne. Cependant, je ne peux pas savoir exactement comment je peux faire pour les deux colonnes à la sametime. Voici ma requête:
SELECT user_id, LISTAGG(department, ';') WITHIN GROUP (ORDER BY record_id)
FROM report
Merci d'avance 🙂
OriginalL'auteur Jaanna | 2012-12-14
Vous devez vous connecter pour publier un commentaire.
Elle nécessite simplement l'utilisation judicieuse de concaténation à l'intérieur de l'agrégation:
c'est à dire globale de la concaténation de
department
avec une virgule etposition
et remplacerposition
avec un espace si elle est NULLE.manquant clause group by
Merci @gauti; j'ai corrigé. Un peu surpris, personne (moi y compris) a remarqué en 6 ans!
OriginalL'auteur Ben