Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2007, 17h04   #1
Nouveau Membre du Club
 
Homme Denis
Développeur Java
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 25
Points : 25
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 :
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.
Atatorus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 17h59   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Par défaut Os ?

Quel est l'OS employé ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 18h11   #3
Nouveau Membre du Club
 
Homme Denis
Développeur Java
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 25
Points : 25
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.
Atatorus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 18h26   #4
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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 ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 18h37   #5
Nouveau Membre du Club
 
Homme Denis
Développeur Java
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 25
Points : 25
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 :
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)
Atatorus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 19h11   #6
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 19h25   #7
Nouveau Membre du Club
 
Homme Denis
Développeur Java
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 25
Points : 25
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.
Atatorus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 22h13   #8
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

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

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 12h24   #9
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 14h51   #10
Nouveau Membre du Club
 
Homme Denis
Développeur Java
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 25
Points : 25
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.
Atatorus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web