Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 27/10/2011, 16h13   #1
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Par défaut CASE WHEN EXISTS avec plusieurs colonne

Bonjour,

Comment faire un select sur plusieurs colonnes en utilisant un CASE WHEN EXISTS ?

Si ma ligne d'enregistrement existe alors je fais un select sur plusieurs colonnes de cette ligne (sans avoir à répéter x fois le CASE WHEN EXISTS pour chaque colonne à afficher).

Apparemment, en utilisant un CASE WHEN EXISTS je ne peux afficher que le select d'une colonne à la fois ...

Comment obtenir les 3 colonnes en testant une seule fois l'existance de la ligne d'enregistrement ?

Merci pour votre aide.

LOPEZ
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 20h03   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Donnez nous un cas précis avec des tables sous forme CREATE et des données sous forme INSERT.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 23h43   #3
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Bonjour et merci pour votre aide.

je joint donc ci-dessous un script contenant les tables et données.
La question concerne la vue se trouvant dans le script.

Je dois, ramener une adresse, longitude et latitude selon les critères suivants :

1=> adresse, Latitude et longitude provenant de Société si existante sinon :
2=> adresse, Latitude et longitude provenant de Contact si existante sinon :
3=> adresse, Latitude et longitude provenant de Société via Opportunité si existante sinon :
4=> adresse, Latitude et longitude provenant de Contact via Opportunité.

Je dois donc tester si il y a une adresse en 1, si c'est le cas les test 2,3 et 4 ne servent à rien. Je peux arrêter le CASE et récupérer Adresse, Longitude et Latitude en 1, sinon je passe en 2 et ainsi dessuite ...

Dans ce cas précis si mon CASE WHEN EXISTS me renvoie vrai j'aimerai pouvoir extraire Adresse, Longitude et Latitude sans avoir à tester pour les 3 avec des CASE WHEN EXISTS pour chacun ...

Voilà, donc ma question est là, puis-je éviter de faire 3 CASE WHEN EXISTS pour remonter ces 3 valeurs qui viennent de la même ligne ?

Merci pour l'aide.

LOPEZ
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 10h30   #4
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
a mon avis, le plus simple, mais pas le plus rapide, c'est de faire un COALESCE

Code :
1
2
3
4
5
SELECT COALESCE(a.adresse,b.adresse,c.adresse) 
FROM matable x
LEFT OUTER JOIN crmsociete a ON x.KEY=a.KEY
LEFT OUTER JOIN crmcontact b ON x.KEY=b.KEY
LEFT OUTER JOIN crmautre c ON x.KEY=c.KEY
où matable est la table où tu es sur qu'il y a la key

cette requête retournera
a.adresse s'il elle est non nulle (donc si elle existe)
sinon b.adresse s'il elle est non nulle (donc si elle existe)
sinon c.adresse s'il elle est non nulle (donc si elle existe)
sinon null
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h27   #5
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Bonjour,

Merci mais la problématique demeure la même. j'y arrive déjà avec des CASE mais cela ne me permet de remonter que l'adresse, pour remonter la Longitude et la Latitude qui sont sur la même ligne je suis obligé d'itérer l'opération 3 fois.
C'est ce que je veux éviter, c'est à dire, ci je trouve une adresse, j'aimerai récupérer sa latitude et Longitude en une seule fois.

Merci pour ton aide.

LOPEZ
LOPEZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h40   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Code :
1
2
3
4
5
6
7
SELECT COALESCE(a.adresse,b.adresse,c.adresse) AS Adresse,
       COALESCE(a.latitude,b.latitude,c.latitude) AS Latitude,
       COALESCE(a.longitude,b.longitude,c.longitude) AS Longitude
FROM matable x
LEFT OUTER JOIN crmsociete a ON x.KEY=a.KEY
LEFT OUTER JOIN crmcontact b ON x.KEY=b.KEY
LEFT OUTER JOIN crmautre c ON x.KEY=c.KEY
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h43   #7
Futur Membre du Club
 
Inscription : mars 2002
Messages : 46
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 46
Points : 18
Points : 18
Merci beaucoup à vous deux.

Désolé pour ma réponse précédente...

cette solution me semble parfaite.

Bonne journée et longue fin de semaine
LOPEZ 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 05h47.


 
 
 
 
Partenaires

Hébergement Web