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

Langage SQL Discussion :

Requête retourne champs ayant un critère similaire


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Requête retourne champs ayant un critère similaire
    Bonjour,
    Dans ma table TABLE de 10 champs (dont ref_dossi et no_clien), j'aimerai avoir les no_clien qui ont la même ref_dossi.
    Je pense qu'il faut passer par select dans un select mais je ne sais pas comment faire (niveau débutant).
    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Salut,
    Pour que nos réponses soient les plus précises possibles, il faut que tu nous dise quel SGBD tu utilises.

    SELECT nom des tes champs
    FROM nom de ta table
    WHERE tes conditions
    Ici tu mettras dans tes conditions celle sur tes ref_dossi

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT ref_dossi
          , no_clien
     
    FROM
            TABLE  -- Pas super comme nom !
     
    GROUP BY
                 ref_dossi
               , no_clien
     
    HAVING
               ref_dossi = 'TaValeur'

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Reformulons la question :
    Tu recherches les ref_dossi associés à plus d'un no_clien, et pour ces ref_dossi lister les no_clien associés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  t1.ref_dossi
        ,   t1.no_clien
    FROM    matable AS t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t1.ref_dossi = t2.ref_dossi
                GROUP BY t2.ref_dossi
                HAVING  COUNT(*) > 1
            )
    ;

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Effectivement, ma question est de trouver les ref_dossi qui ont plus qu'un no_clien.
    j'ai mis cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  t1.ref_dossi, t1.no_clien
    FROM    rev_facture as t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    rev_facture as t2
                WHERE   t1.ref_dossi = t2.ref_dossi
                GROUP BY t2.ref_dossi
                HAVING  COUNT(*) > 1
            )
    ;
    mais j'ai une erreur à la ligne 2 lors de l'exécution, disant que la commande ne se termine pas correctement!

    Merci,

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Pense a utiliser la balise [code], ça sera plus lisible.

    Il y a effectivement une erreur a la ligne 2. Il n'y a pas besoin de mettre as pour la table, il s'utilise dans la close SELECT (source).
    Dans la close FROM, tu n'as qu'a mettre l'alias séparé d'un espace (source)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  t1.ref_dossi, t1.no_clien
    FROM    rev_facture t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    rev_facture as t2
                WHERE   t1.ref_dossi = t2.ref_dossi
                GROUP BY t2.ref_dossi
                HAVING  COUNT(*) > 1
            )
    ;

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Ca me sort tous les REF_DOSSI qui ont le même NO_CLIEN.
    REF_DOSSI NO_CLIEN
    -------------------- ----------
    REEP SEPTEMBRE 2000 18974
    REEP OCTOBRE 2000 18974
    LOFH ANNÉE 2001 18974
    REEP NOVEMBRE 2000 18974
    REEP DÉCEMBRE 2000 18974


    Alors que j'ai besoin de l'inverse : les no_clien qui ont la même ref_dossi.

    Merci,

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    J'ai oublié que les no_clien doivent être différent.
    Je tente de mon coté, je mettrai la solution si j'y arrive, sinon si qqn voit la réponse rapidement, merci de la poster.

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Désolée, déjà j'ai pas vu il y avait encore une faute au niveau du FROM de la sous-requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  t1.ref_dossi, t1.no_clien
    FROM    rev_facture t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    rev_facture t2
                WHERE   t1.ref_dossi = t2.ref_dossi
                GROUP BY t2.ref_dossi
                HAVING  COUNT(*) > 1
            )
    ;

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Voilà, j'ai essayé ca mais ca ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  t1.ref_dossi, t1.no_clien 
    FROM rev_facture t1
    WHERE EXISTS
            (   SELECT  1
                FROM    rev_facture t2
                WHERE   t1.ref_dossi = t2.ref_dossi
            and     t1.no_clien <> t2.no_clien  (<> ou !=)
                GROUP BY t2.no_clien 
                HAVING  COUNT(*) > 2
            )
    ;
    J'espèrai avoir les ref_dossi qui ont plus qu'un no_clien mais aussi que ca ne soit pas le même no_clien.
    J'ai mis count(*) > 2 pour cibler le résultat. Pas besoin de voir tous les enregistrements. Seulement les ref_dossi qui ont plus qu'un no_clien(différent).

    Meci pour votre aide.

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Il n'est pas nécessaire de faire de comptages avec cette formulation de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  t1.ref_dossi, t1.no_clien 
    FROM rev_facture t1
    WHERE EXISTS
            (   SELECT  1
                FROM    rev_facture t2
                WHERE   t1.ref_dossi = t2.ref_dossi
                AND     t1.no_clien <> t2.no_clien
            )
    ;
    Citation Envoyé par lola06 Voir le message
    Il y a effectivement une erreur a la ligne 2. Il n'y a pas besoin de mettre as pour la table, il s'utilise dans la close SELECT (source).
    Dans la close FROM, tu n'as qu'a mettre l'alias séparé d'un espace (source)
    La norme SQL ANSI :2003 (ISO/IEC 9075-2:2003 (E) §7.6 <table reference>) propose l'utilisation facultative du mot clé AS entre la définition de table et son nom de corrélation (souvent nommé alias).
    De nombreux SGBD acceptent cette syntaxe. Oracle la refuse (mais Oracle et la standardisation du langage SQL n'ont jamais fait bon ménage).

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Effectivement, ca marche. J'avais des doutes aussi sur le count, car je l'avais utilisé une fois pour me sortir les enregistrements non identifiés comme doublon.
    En tk, Merci tout le monde.

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

Discussions similaires

  1. Compter le nombre de lignes ayant des critères similaires
    Par JohnJ_M dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 21/11/2014, 10h10
  2. [AC-2003] Requête avec champ calculé multi-critère : je cale
    Par gandalf20000000 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/09/2009, 18h31
  3. Réponses: 10
    Dernier message: 19/04/2007, 13h14
  4. Réponses: 9
    Dernier message: 06/09/2006, 13h56
  5. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18

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