IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Récupérer plusieurs lignes et les afficher dans une seule colonne et un seul champ


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 42
    Par défaut Récupérer plusieurs lignes et les afficher dans une seule colonne et un seul champ
    Bonjour,

    Je bosse sur une base de données ÉLÈVES et je dois extraire de cette base les noms, prénoms, âge, sexe, classe, options, etc .....

    Hormis les OPTIONS, tout les champs que je dois récupérer s'affiche correctement.

    Il peut y avoir plusieurs OPTIONS par élève (de 1 à 10) ou bien aucune option selon les élèves.
    Chaque option à bien évidemment une clé unique OPTION_ID

    Exemple:
    Pour un élève, j'ai 3 options :
    ALL1 BRYAN
    AGL2 BRYAN
    ESP3 BRYAN
    Je souhaite que le résultat retourné ressemble à ceci :

    BRYAN ALL1, AGL2, ESP3
    J'ai parcouru nombreux forum et il semblerait que je dois faire une FONCTION pour pouvoir obtenir le résultat que je souhaite.
    J'ai essayé GROUP_CONCAT, CONCAT, CONCAT_WS, mais rien à y faire ...
    Je dois probablement mal syntaxé ma requête.

    Pourriez-vous me venir en aide car je ne parviens pas à faire cette fonction ?

    Je vous souhaite une belle journée à toutes et tous.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 782
    Par défaut
    Bonjour pour faire ce genre d'opération j'utilise la fonction xmlserialize.
    https://www.ibm.com/support/knowledg...serialize.html
    A la suite de ça tu peux chercher le mots clé : xmlagg, xmltxt

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 654
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Darkzinus Voir le message
    Bonjour pour faire ce genre d'opération j'utilise la fonction xmlserialize.
    https://www.ibm.com/support/knowledg...serialize.html
    A la suite de ça tu peux chercher le mots clé : xmlagg, xmltxt
    Jamais utilisé, quelques exemples avec un échantillon des données en entrée et du résultat obtenu seraient les bienvenus

  4. #4
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    Je prefererais utiliser LISTAGG https://www.ibm.com/support/knowledg...f_listagg.html
    a+

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 42
    Par défaut
    Salut à tous,

    Merci pour ces 2 liens, je vais essayer de regarder ça.

    Pour les données tests et le résultat attendu c'est ce que j'ai mis dans le premier post en fait, 1 élève peut avoir plusieurs options (angl, allemand, etc ...) qui apparaissent en BDD sur plusieurs lignes car chaque option à son ID et je voudrais que ces résultats soit concaténer sur une seule ligne.

    @ + et bonne journée.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 180
    Par défaut
    Il y a aussi les fonctions "row_number() over(partition by {regroupementi} order by {tri})" et "union all". Je n'ai pas d'exemple simple sous la main, mais tu dois trouver sur le net.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 654
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par bernard59139 Voir le message
    Applicable uniquement depuis la V12

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 782
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Applicable uniquement depuis la V12
    J'avais du regarder à l'époque et effectivement je n'avais pas pu l'utiliser pour cette raison. D'où ma méthode "barbare".

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 782
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Jamais utilisé, quelques exemples avec un échantillon des données en entrée et du résultat obtenu seraient les bienvenus
    J'avais ça (peu lisible mais qui marchait, je l'ai "anonymisé" pour des raisons de confidentialité) sur une plateforme AS400/fichiers (pas du DB2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select                                
      CLEREGROUP,
      xmlserialize(xmlagg(xmltext(concat(virg,                          
      DATA)))          
      as varchar( 160 ) ccsid 297 ), 2) DATA
      FROM TABLE
      cross join  qtemp/litvirg virg
    group by
      CLEREGROUP
    nous avons une table qui se présenterait comme ceci :
    CLEREGROUP DATA
    01 titi
    01 toto
    02 tutu
    02 tata

    qtemp/litvirg contient une ","
    du coup ça me donne une structure avec la cle et les données séparée par des virgules :
    01 titi, toto
    02 tutu, tata

    J'espère que c'est plus clair.
    Il y sans doute des moyens plus simples pour arriver à ce résultat.

    Le LISTAGG proposé plus haut par BERNARD semble beaucoup plus simple (mais inconnu sur ma version de l'AS400)!

  10. #10
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 42
    Par défaut
    Oui en effet le LISTAGG semble plus simple mais ma requête est vraiment longue et du coup je n'arrive pas à implémenter le LISTAGG ...

  11. #11
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 42
    Par défaut
    Voici un extrait de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    SELECT DISTINCT
        SC.ETAB.RNE AS RNE,
    	REPLACE(SC.EL_STR.C_STR,' ', '-') AS division,
     
    **************************
        SC.MAT_ENS.GEST_MATIERE_ENS AS options,
    **************************
     
    	LTRIM(SC.E.NOM_EL) AS nom_famille,
    	SC.E.NOM_USAGE_EL AS nom_usage,
    	SC.E.EL_ID AS ID_EL,
    	TO_CHAR(SC.E.DATE_NAISS_ELE, 'DD/MM/YYYY') AS date_naissance,
    	SC.E.TEL_PERSL AS portable_EL
     
    FROM SC.EL
    INNER JOIN SC.OPTION_EL ON (SC.OPTION_EL.EL_ID = SC.E.EL_ID)
    INNER JOIN SC.MAT_ENS ON (SC.MAT_ENS.MAT_ENS_ID = SC.OPTION_EL.MAT_ENS_ID)
    FULL JOIN SC.EL_PERS_ADR ON (SC.EL_PERS_ADR.EL_ID = SC.E.EL_ID)
    FULL JOIN SC.ADR ON (SC.PERS.ADR_ID = SC.ADR.ADR_ID)
     
    WHERE SC.ETAB.RNE IN ('xxxxxxxA')
     
    AND
    SC.E.DATE_SORTIE_ETAB IS NULL
     
    **************************
    GROUP BY SC.MAT_ENS.MAT_ENS_ID
    **************************
     
    ORDER BY SC.ETAB.RNE ASC;
    Les 2 lignes contenues dans les *************** sont celles que je dois intégrer pour récupérer les options des élèves.

    En écrivant juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SC.MAT_ENS.GEST_MATIERE_ENS AS options,
    Mes 3 options apparaissent sur mon élève test.

    Si vous avez une idée avec "xmlserialize" ou "LISTAGG" je suis preneur car je n'y arrive pas là ...

    D'avance merci à vous.

Discussions similaires

  1. [Débutant] Récupérer les données d'une table liée et les afficher dans une vue.
    Par Lotfiphp dans le forum ASP.NET MVC
    Réponses: 13
    Dernier message: 15/06/2018, 00h25
  2. Réponses: 3
    Dernier message: 09/05/2018, 17h35
  3. Réponses: 7
    Dernier message: 03/04/2018, 13h16
  4. [Python 3.X] Récupérer les logs de Python pour les afficher dans une IHM (PyQt)
    Par guy16 dans le forum Général Python
    Réponses: 16
    Dernier message: 12/09/2015, 09h16
  5. Récupérer données formulaire et les afficher dans une liste à puce
    Par johnny3 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/02/2010, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo