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

Access Discussion :

sous-requête sur 1 seule table


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut sous-requête sur 1 seule table
    Bonjour,

    J'ai une table avec 2 champs : USER_ID (qui est un numéro d'identification) et PILOT (qui est utilisé comme un booléen du type 1/0 mais qui est du texte).

    Un USER peut avoit dirigé ou pas des projets.

    Du coup ma table ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     USER_ID         PILOT
          1              0
          1              1
         34              0
         68              0
         68              1
    Je voulais récupérer un tableau dans lequel je voulais savoir si un USER avait déjà été AU MOINS une fois chef de projet. Ainsi je désirais récupérer le tableau suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USER_ID            PILOT
           1              1
          34              0
          68              1
    J'ai donc tapé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SelectT1.USER_ID, T1.PILOT from table as T1
    where T1.PILOT='0'
    and NOT EXISTS (Select T2.USER_ID from Table as T2
                             where T1.USER_ID>T2.USER_ID
                             and T2.PILOT='1');
    Le résultat attndu n'est pas au RDV car j'obtiens un tableau avec des PILOT à 0 et aucun à 1.

    Pouvez-m'éclairer quant aux erreurs se trouvant dans la requête.

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 900
    Points : 4 790
    Points
    4 790
    Par défaut
    Salut

    Ainsi je désirais récupérer le tableau suivant :

    Code :
    USER_ID PILOT
    1 1
    34 0
    68 1
    D'abord j'ai un peu de mal à comprendre : tu veux connaitre si un USER a été au moins une fois chef de projet.
    Par consequent, un début: pourquoi ne pas demander les USER qui ont été chefs de projets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select distinct USER_ID from Table 
                             where USER_ID > PILOT='1' order by USER_ID ;
    Bonne journée,

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select userid,iif(nb>0,"1","0") as pilot from
    (SELECT userid, Sum(CInt([pilot])) AS nb
    FROM matable
    GROUP BY  userid);

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut
    Essaye ça, je pense que ça devrait marcher.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.USER_ID, Sum(T1.PILOT) AS SommeDePILOT
    FROM T1
    GROUP BY T1.USER_ID
    HAVING (((Sum(T1.PILOT))<>0));

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    ça ne serait plus simple comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select T1.USER_ID, Max(T1.PILOT) from table as T1
    GROUP BY T1.USER_ID
    A+

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Merci à tous, votre aide a pu résoudre mon problème.

    Merci LedZeppII, ton programme ultra simple montre à quel point on peut chercher loin alors que la solution coule de source...

    Citation Envoyé par LedZeppII
    ça ne serait plus simple comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select T1.USER_ID, Max(T1.PILOT) from table as T1
    GROUP BY T1.USER_ID
    A+
    a+

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

Discussions similaires

  1. Optimiser une requête sur une seule table
    Par LB dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/03/2015, 17h38
  2. update avec sous requête sur la même table
    Par beyo dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2012, 14h21
  3. Réponses: 5
    Dernier message: 12/09/2012, 09h52
  4. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  5. [SQL serveur] [debutant] requette sur une seule table
    Par glanumf dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 15h27

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