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 24/09/2011, 22h23   #1
Invité de passage
 
Inscription : février 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 14
Points : 2
Points : 2
Par défaut comment afficher 3 colonnes en une seule ?

Bonjour,
Je souhaite faire un select sur 3 colonnes contenant des donnees numeriques et que les donnees s'affichent sur 1 seul colonne en fusionnant les 3... (ex. ci dessous)
J'ai essayé avec Concat mais cela ne semble pas fonctionner... de plus il semble qu'avec db2 c'est limité à 2 colonnes...?
Est ce que c'est la bonne fonction ou voyez vous d'autres solutions ?
quel serait le script ?
Exemple :
col1 col2 col3
1234 - -
- 4756 -
- - 6895

doit afficher :
col1
1234
4756
6895

En vous remerciant pour votre aide !
Stephan09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 23h30   #2
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
Bonsoir,

Ton souhait n'est pas vraiment de fusionner les 3 colonnes mais de toutes les afficher dans une seule colonne résultat.

Si tu souhaitais concaténer, tu pourrais écrire

Code :
SELECT DIGITS(COL1)!!DIGITS(COL2)!!DIGITS(COL3) FROM TAB
La concaténation ne s'exerçant que sur des données, alpha, tu dois appliquer la fonction DIGITS sur les colonnes numériques pour pouvoir te servir de !! Tu pourrais aussi de servir des fonctions CHAR ou CAST.

Ceci dit, par rapport à l'exemple cité dans ta demande, en admettant que les - signifient valeur NULL et en admettant que tu n'ais toujours qu'une seule des 3 colonnes renseignées, alors tu peux écrire

Code :
SELECT COALESCE(COL1, COL2, COL3) FROM TAB
La fonction COALESCE renvoie la 1ère expression non NULL de celles qui sont précisées entre parenthèses. Donc si COL1 est renseignée, DB2 renvoie la valeur de COL1. Par contre, si COL1 est NULL, DB2 teste COL2. Si COL2 est renseignée, DB2 renvoie la valeur de COL2...

Problème : si COL1 et COL2 sont toutes les 2 renseignées, alors DB2 renverra COL1 sans tenir compte de COL2.

Si les - ne signifie pas NULL, mais 0 par exemple, tu peux écrire un CASE

Code :
1
2
3
4
5
6
7
8
SELECT
CASE
  WHEN COL1 <> 0 THEN COL1
  WHEN COL2 <> 0 THEN COL2
  WHEN COL3 <> 0 THEN COL3
  ELSE ???
END
FROM TAB
Le CASE teste les différents prédicats dans l'ordre où ils sont écrits. Dès qu'un des prédicats renvoie Vrai, DB2 renvoie le THEN correspondant. Dans le ELSE de la fin tu mets ce que tu veux (pas de THEN à préciser). Attention, si pas de ELSE et qu'aucun prédicat n'est vrai, alors le CASE renvoie NULL.

Bonne utilisation.
pdz74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 06h36   #3
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 503
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : octobre 2006
Messages : 503
Points : 688
Points : 688
Bonjour

Pour completer la réponse de pdz74, CONCAT fonctionne bien avec 2 colonnes, mais rien ne t'empeche d'utiliser plusieurs CONCAT

ex:
Code :
SELECT cola CONCAT colb CONCAT colc
truc utilisable avec la fonction CONCAT, mais ca rend très vite la requête illisible.

Si je dois travailler sur plusieurs machines, j'évite d'utiliser le ! comme opérateur de concaténation. ! n'est pas toujours reconnu (problème de CCID code-page).
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 14h43   #4
Invité de passage
 
Inscription : février 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 14
Points : 2
Points : 2
Par défaut MERCI !!!

Bonjour PDZ74 et bernard59139,
Je vous remercie pour votre reponse rapide !

J'ai testé ce matin le script suivant :
SELECT COALESCE(COL1, COL2, COL3) FROM TAB

Et cela affiche parfaitement ce que je souhaitais avoir.
J'ai inclus cette partie de codde dans le script entier et cela fonctionne parfaitement !

Donc merci à bernard59139 d'avoir contribué à ce post et merci infiniment PDZ74 pour la reponse ultra rapide (à 23h30 )! et tres detaillée qui a resolu mon probleme !

Bonne journée à vous,
Stephan09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h56.


 
 
 
 
Partenaires

Hébergement Web