Sortie séparée par une virgule DB2
Comment obtenir intégré la fonction pour séparés par des virgules des valeurs de colonne dans sql
dans DB2 , e.g si il y a une colonne avec cette politique de l'id et il dispose de 3 lignes avec le même id mais ont trois rôles différents dans les trois lignes , puis il devrait récupérer les lignes en une seule ligne "3,4,5"
par exemple
1. 4555 "2"
2. 4555 "3"
3. 4555 "4"
sortie 4555 2,3,4
dans une base de données DB2 dans une ligne
source d'informationauteur gaurav
Vous devez vous connecter pour publier un commentaire.
C'est exactement ce dont vous avez besoin:
http://radheshk.blogspot.com/2008/02/sql-tips-techniques-string-aggregation.html
Malheureusement, il n'y a aucun moyen de définir une coutume fonction d'agrégation dans DB2 facilement (ou pas que je sache). Donc, on doit recourir à des requêtes récursives, comme dans l'exemple ci-dessus.
Une autre façon de résoudre ce problème implique les curseurs, mais c'est probablement encore pire...
LISTAGG fonction est une fonction nouvelle dans DB2 LUW 9.7
voir l'exemple:
exemple: sélectionnez sans n'importe quel ordre en colonne groupée
résultat:
exemple: select avec la clause order by dans la colonne groupée
résultat:
Je pense qu'avec cette petite requête, vous pouvez faire ce que vous voulez.
C'est l'équivalent de MySQL GROUP_CONCAT dans DB2.
Ce sera quelque chose de sortie:
assumming votre résultat original était quelque chose comme ça:
En fonction de la DB2 version que vous avez, vous pouvez utiliser les fonctions XML pour atteindre cet objectif.
Exemple table avec des données
L'ensemble des résultats en utilisant les fonctions xml
résultats:
Utiliser remplacer pour rendre le résultat regarder mieux
Nettoyé résultat
Juste vu une meilleure solution à l'aide de XMLTEXT au lieu de XMLELEMENT ici.
Depuis DB2 9.7.5 il y a une fonction pour ça:
LISTAGG(colname, separator)
vérifier cela pour plus d'informations: À l'aide de LISTAGG à son Tour des Lignes de Données dans une Liste Séparée par des Virgules
Mon problème était de transposer les champs de ligne(CLOB) à la colonne(VARCHAR) avec un fichier CSV et l'utilisation de la transposée de la table pour les rapports. Parce que la transposition sur le rapport de la couche ralentit le rapport.
Une façon est d'utiliser récursive SQL. Vous pouvez trouver de nombreux articles à ce sujet mais il est difficile et coûteuse en termes de ressources si vous voulez vous joindre à tous vos récursive transposée colonnes.
J'ai créé plusieurs tables temporaires globales où j'ai stocké unique transposée colonnes avec un identificateur de clé. Finalement, j'ai eu 6 tables temporaires pour l'assemblage de 6 colonnes, mais en raison de la limitation de l'allocation des ressources que je n'étais pas en mesure d'apporter toutes les colonnes. J'ai opté pour les dessous de 3 formules et puis j'ai juste eu à courir le 1er requête qui m'a donné de sortie dans 10 secondes.
J'ai trouvé plusieurs articles sur l'utilisation de XML2CLOB fonctions et ont trouvé de 3 façons différentes.
Assurez-vous que vous êtes le moulage de votre "NOMATTRIBUT" varchar dans une sous-requête, puis en appelant ici.
autre possibilité, avec une expression de table commune récursive
Essayez ceci: