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 :

Comment créer une fonction concatenation sur un regroupement ?


Sujet :

DB2

  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 144
    Points : 645
    Points
    645
    Par défaut Comment créer une fonction concatenation sur un regroupement ?
    Bonjour,

    j'ai une requête avec regroupement, et parmi les résultats renvoyés, outre les classiques SUM, MIN, MAX, ..., j'ai besoin d'une fonction de concatenation.
    Je voudrais, par exemple que la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT col1, MIN(col2), CONCAT(col3) from table group by col1;
    me retrourne pour chaque rang, la colonne 1, le minimum de la colonne 2 et l'ensemble des valeurs de la colonne 3 concaténés dans un seul champ, éventuellement séparés par une virgue ou tout autre caractère.
    Une telle fonction existe-t-elle, ou est-il possible de la créer ?

    Merci de votre aide.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Os ?
    Quel est l'OS employé ?

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 144
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par Mercure
    Quel est l'OS employé ?
    Je ne sais pas exactement : tout ce que je sais, c'est que la base tourne sur un AS 400 lointain que j'attaque avec mes requêtes à travers une connexion ODBC. Les requêtes sont faites par un logiciel en SQLWindows que j'écris, qui tourne sur des postes équipés de XP.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Si c'est un AS400, alors l'OS est probablement l'OS/400 (ou i5 ou iSeries ou System i) et la base de données DB2/400.

    Tu dis que sql tourne sur XP ? Es-tu sûr de çà ? Que tu établisses tes requêtes sous Windows via un logiciel micro, c'est normal, mais en principe leur exécution se fait sur le serveur distant et non pas sous XP. Comment s'appelle le logiciel sql que tu utilises sur XP ?

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 144
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par Mercure
    Tu dis que sql tourne sur XP ? Es-tu sûr de çà ? Que tu établisses tes requêtes sous Windows via un logiciel micro, c'est normal, mais en principe leur exécution se fait sur le serveur distant et non pas sous XP. Comment s'appelle le logiciel sql que tu utilises sur XP ?
    Je me suis mal exprimé : la requête s'exécute évidemment sur l'AS400. Le langage de programmation que j'utilise s'appelle SQLWindows, de Gupta. J'envoie mes requêtes sous forme de chaînes, et je récupère les valeurs dans des variables. Voici un bout de code typique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set rqt = "select col1, col2 from table into :var1, :var2"
    Call SqlPrepareAndExecute (curseur, rqt)
    Call SqlFetchNext (curseur, n)
    While n = Fetch_OK
        Call fonction (var1, var2)
        Call SqlFetchNext (curseur, n)

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Combien peut-il y avoir de valeurs distinctes pour la colonne3 à concaténer sur une seule colonne ? Le nombre de valeurs est-il fixe ?

    je pense à l'emploi de CASE.

  7. #7
    Membre confirmé

    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 144
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par Mercure
    Combien peut-il y avoir de valeurs distinctes pour la colonne3 à concaténer sur une seule colonne ? Le nombre de valeurs est-il fixe ?

    je pense à l'emploi de CASE.
    Le nombre de valeurs est variable, de 0 à je ne sais pas combien, et évidemment les valeurs ne sont pas toujours les mêmes.

  8. #8
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Il n'est pas possible de créer des fonctions utilisateur portant sur une colonne (non scalar). Par contre, tu peux créer une fonction utilisateur qui va au moyen d'une table intermédiaire faire la concaténation. Tu pourras alors à la fin faire une jointure entre le résultat du select et la table intermédiaire.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Mcd
    Je rejoins la méthode de jab. En effet, si le nombre de valeurs est inconnu, alors il pourrait y en avoir 10, 100, 1000, etc.. Donc, je vois mal concaténer disons une centaine de valeurs dans une seule colonne, fussent-elles séparées par un caractère quelconque ! Revois ton MCD.

  10. #10
    Membre confirmé

    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 144
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par Mercure
    Je rejoins la méthode de jab. En effet, si le nombre de valeurs est inconnu, alors il pourrait y en avoir 10, 100, 1000, etc.. Donc, je vois mal concaténer disons une centaine de valeurs dans une seule colonne, fussent-elles séparées par un caractère quelconque ! Revois ton MCD.
    Je ne peux malheureusement pas refaire le MCD, la base existe déjà et tourne en production chez plusieurs clients. De plus, il s'agit d'un besoin ponctuel (mais qui sait s'il ne se représentera pas un jour sous une autre forme ?).
    Quant aux nombres de valeurs différentes, il va de 1 (voire 0) jusqu'à moins de 10, mais sans savoir combien il y en a.
    Je vais continuer à creuser la question, mais je pense m'orienter vers la récupération de tous les rangs et colonnes nécessaires, et faire le traitement moi même dans mon logiciel.
    Merci de vos réponses quand même.

Discussions similaires

  1. comment créer une fonction et la déclancher a chaque jour
    Par G_Kill dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/12/2006, 19h02
  2. Comment lancer une fonction présente sur une autre page ?
    Par mappy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2006, 15h44
  3. Comment créer une base utilisable sur PC sans ACCESS
    Par lesalloues dans le forum Runtime
    Réponses: 4
    Dernier message: 22/08/2006, 15h52
  4. Créer une Fonction recherche sur Access
    Par remwideco dans le forum Access
    Réponses: 4
    Dernier message: 30/01/2006, 11h36

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