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 :

Créer une requête qui montre au même temps les mariés et les célibataires


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut Créer une requête qui montre au même temps les mariés et les célibataires
    Bonsoir à tous,

    Je m'excuse si le problème a été résolu auparavant, j'ai cherche sur les forum pendant une heure sans succès.

    J'ai une tblPersonnes dans laquelle il peut y avoir des gens mariés ou célibataires et je voudrais créer une requête qui me montre sur la même ligne ceux qui sont mariés, et ceux qui sont célibataires dans leur respective ligne, tout seuls bien sûr.

    Exemple:

    Bernard......... Claire............(Mariés)
    Jospeh................................(Célibataire)
    Marie..................................(Célibataire)
    Michel........... Esther...........(Mariés)
    Sur ma table:
    IdPersonne
    IdM (même valeur pour ceux qui sont mariés, et null pour les célibataires)
    IdSexe

    J'ai lu le document sur les jointures mais je n'arrive pas à choisir la bonne méthode, si quelqu'un peut me conseiller je vous remercie d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : juillet 2007
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT Pers.IdPersonne, 
           CASE WHEN Pers.idM is null THEN '................(Célibataire)' ELSE '......' + Conjoint.idPersonne + '....(Mariés)' END   as idConjoint
     
    FROM tblPersonnes Pers left outer join tblPersonnes Conjoint on Pers.idM = Conjoint.idM and Conjoint.idM is not null
     
    // Affichage de tous les gens célibataires
    WHERE Pers.idM is null 
     
    // Et pour les personnes mariés seul les hommes sont récupérés avec leur conjoint pour éviter les doublons comme (Bernard......... Claire puis Claire......... Bernard)
    OR (Pers.idM is not null and Pers.IdSexe = 'H')

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Bonsoir,

    Merci hyrockbass pour ta réponse. J'ai essayé ta solution, mais je continuais à avoir le même problème, pour que ceux qui sont mariés apparaissent sur la même ligne je dois écrire ma dernière ligne comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OR (Pers.idM IS NOT NULL AND Pers.IdSexe = 'H' AND  AND Conjoint.IdSexe = 'F')
    La requête reste donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Pers.IdPersonne, 
           CASE WHEN Pers.idM IS NULL THEN '................(Célibataire)' ELSE '......' + Conjoint.idPersonne + '....(Mariés)' END   AS idConjoint
     
    FROM tblPersonnes Pers LEFT OUTER JOIN tblPersonnes Conjoint ON Pers.idM = Conjoint.idM AND Conjoint.idM IS NOT NULL
     
    // Affichage de tous les gens célibataires
    WHERE Pers.idM IS NULL 
     
    // Et pour les personnes mariés seul les hommes sont récupérés avec leur conjoint pour éviter les doublons comme (Bernard......... Claire puis Claire......... Bernard)
    OR (Pers.idM IS NOT NULL AND Pers.IdSexe = 'H' AND  AND Conjoint.IdSexe = 'F')
    Cela marche mais ce n'est pas très élégant car ceux qui sont célibataires apparaissent dans les deux colonnes.

    Marie...............Marie...................(Célibataire)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : juillet 2007
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Effectivement, dans ce cas dans la jointure il faut ajouter un critère pour dire que le sexe de la personne doit être différent du sexe du conjoint

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND Pers.IdPersonne <> Conjoint.IdPersonne
    ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT Pers.IdPersonne, 
           CASE WHEN Pers.idM IS NULL THEN '................(Célibataire)' ELSE '......' + Conjoint.idPersonne + '....(Mariés)' END   AS idConjoint
     
    FROM tblPersonnes Pers LEFT OUTER JOIN tblPersonnes Conjoint ON Pers.idM = Conjoint.idM AND Conjoint.idM IS NOT NULL AND Pers.IdPersonne <> Conjoint.IdPersonne
     
    // Affichage de tous les gens célibataires
    WHERE Pers.idM IS NULL
     
    // Et pour les personnes mariés seul les hommes sont récupérés avec leur conjoint pour éviter les doublons comme (Bernard......... Claire puis Claire......... Bernard)
    OR (Pers.idM IS NOT NULL AND Pers.IdSexe = 'H' AND Conjoint.IdSexe = 'F')

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Un grand merci, cela marche très bien.

    Je marque résolu!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/08/2013, 16h12
  2. Réponses: 1
    Dernier message: 04/07/2013, 11h23
  3. Réponses: 1
    Dernier message: 27/05/2007, 00h11
  4. créer une requête qui selectionne les 10 derniers enregistrements
    Par kuhnden dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/04/2007, 17h13
  5. 2 fonctions qui tournent en même temps
    Par GOUGOU1 dans le forum C
    Réponses: 7
    Dernier message: 07/12/2002, 19h42

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