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

SQL Oracle Discussion :

Conception requete sql


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut Conception requete sql
    Bonjour,

    J'aimerais obtenir une liste de personnel (par section et par formation) qui n'ont pas effectué une ou des formations.

    Ce que j'ai tenté: Requête minus: La liste de ts les matricules MINUS La liste de ce qui ont fait la ou les formations. Cela fonctionne pr une formation. Mais si je veux mettre plusieurs formations, ça pose problème car il cumule les personnes qui n'ont pas fait les 2 formations. Or j'aimerais les personnes qui n'ont pas fait la formation1 et les personnes qui n'ont pas fait la formation 2.

    Je m'explique avec des descriptions:
    voila ce que j'ai aujourd'hui:

    => La liste de toutes les personnes par section:
    Matricule section
    123 1
    456 1
    789 2
    147 3
    258 3
    369 3

    => La liste des personnes formés par formation:
    Matricule section Formation
    123 1 XXX
    789 2 AAA
    789 2 BBB
    258 3 AAA


    Et voila ce que j'aimerais obtenir:
    =>Formation AAA
    Pers formées
    Matricule Formation
    789 AAA
    258 AAA

    Pers non formées
    Matricule Formation
    123
    456
    147
    369



    => Formation BBB
    Pers formées
    Matricule Formation
    789 AAA

    Pers non formées
    Matricule Formation
    123
    456
    147
    258
    369


    Vous avez une piste?
    Merci bcp.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Regardez du côté de NOT EXISTS.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Bonjour.
    Pourquoi utiliser un MINUS?
    Matricules ayant la formation AAA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.matricule, t1.section, t2.formation
      FROM table1 t1, table2 t2
    WHERE t1.matricule = t2.matricule
    AND t2.formation = 'AAA'
    Matricules n'ayant pas la formation AAA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.matricule, t1.section
      FROM table1 t1, table2 t2
    WHERE t1.matricule = t2.matricule(+)
    AND t2.formation <> 'AAA'

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Oui j'ai fait un peu comme ca.
    Par contre, j'aimerais différencier les formations.
    Par ce que si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.matricule, t1.section
      FROM table1 t1, table2 t2
    WHERE t1.matricule = t2.matricule(+)
    AND t2.formation not in ( 'AAA', 'XXX')
    et bien j'aurais le cumul des personnes qui n'ont pas ni la formation 1 ni la formation2 .

    Or je veux dédoubler l'information par formation.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create table matsec (mat integer, sec integer);
    create table matsecfor(mat integer, sec integer,formation varchar2(3));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT   a.mat,
             a.sec,
             b.formation
                      || DECODE(
                                 (SELECT COUNT(1)
                                 FROM    matsecfor
                                 WHERE   a.mat       = mat
                                     AND a.sec       = sec
                                     AND b.formation = formation
                                 ),
                                0,' non effectuée')
    FROM     matsec a ,
             (SELECT DISTINCT formation
             FROM             matsecfor
             ) b
    ORDER BY 1,2,3
    /
    Je fais un produit cartésien entre les tables pour combler les trous et je compte le nombre de ligne trouvées dans matsecfor pour chaque tuple matricule, section, formation possible

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Ca m'a l'air pas mal ca. Je vous remercie de votre rapidite!

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

Discussions similaires

  1. conception d'un generateur graphique de requete sql
    Par oussama_win dans le forum UML
    Réponses: 1
    Dernier message: 03/11/2009, 16h13
  2. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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