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

MS SQL Server Discussion :

CASE WHEN EXISTS avec plusieurs colonne


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 51
    Points : 40
    Points
    40
    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Donnez nous un cas précis avec des tables sous forme CREATE et des données sous forme INSERT.

    A +

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    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

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    a mon avis, le plus simple, mais pas le plus rapide, c'est de faire un COALESCE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    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

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 +

  7. #7
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ComboBox] Combobox avec plusieurs colonnes
    Par madica dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/01/2007, 12h25
  2. Combo avec plusieurs colonnes (layout?)
    Par spirodeau dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/08/2006, 09h22
  3. vba, listbox avec plusieur colonne
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/06/2006, 19h35
  4. liste deroulante avec plusieurs colonnes?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/06/2006, 13h08
  5. Réponses: 1
    Dernier message: 04/05/2005, 12h43

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