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 :

Soustraction avec 2 sous-requêtes


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Soustraction avec 2 sous-requêtes
    Bonjour à tous, je suis novice en matière de requête sql, et je cale sur la requête d'un TD (oui je suis étudiant).

    Voici la requête : Liste des enseignants qui ont enseigné moins d’heures que prévu en octobre 2011.

    J'ai fait 2 sous requêtes qui affichent le nombre d'heures prévues, et le nombre d'heures effectuées. Je dois maintenant faire la soustraction (heures prévues - heures effectuées), et n'afficher que les résultats positifs.

    C'est donc pour cette requête que j'ai besoin de votre aide !

    Voici à quoi ressemble une de mes sous requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT nom, sum(previsions.duree) AS nb_heures_prevues
    FROM intervenants, previsions
    WHERE intervenants.intervenantid=previsions.intervenant
    And previsions.jour Between #10/1/2011# And #10/31/2011#
    GROUP BY nom
    Les tables sont en pièce jointe.

    Merci d'avance.
    Images attachées Images attachées  

  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 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Vous pouvez par exemple faire une jointure sur le prof entre vos deux sous requête et faire la soustration dans la clause WHERE.

    Quelque chose de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.prof
    FROM (ma première sous requête) AS T1
           INNER JOIN (ma seconde sous requête) AS T2
                 ON T1.??? = T2.???
    WHERE T1.Nb_heure > T2.NB_heure
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse.

    Finalement je n'ai pas utilisé de sous requête, j'ai tout regroupé en une :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT nom
    FROM intervenants, previsions, realisations, durees AS duree_previsions, durees AS duree_realisations
    WHERE intervenants.intervenantid=previsions.intervenant
    and intervenants.intervenantid=realisations.intervenant
    And previsions.jour Between #2011/10/01# And #2011/10/31#
    And realisations.jour Between #2011/10/01# And #2011/10/31#
    and duree_previsions.dureeid=previsions.duree
    and duree_realisations.dureeid=realisations.duree
    GROUP BY nom
    HAVING sum(duree_previsions.nombreheure)>sum(duree_realisations.nombreheure)

    A priori, ça a l'air de fonctionner !

    Cordialement.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Cela serait judicieux d'utiliser la norme (utilisé depuis plus de 20 ans) pour l'écriture des jointures
    Merci d'ajouter un sur les tags qui vous ont aidé

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/04/2008, 09h59
  2. Check avec une sous-requête
    Par Neal Morse dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 22/03/2008, 22h31
  3. Problème avec des sous requêtes
    Par nicocolt dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/10/2007, 15h19
  4. Ordonner avec une sous requête ,possible ou pas?
    Par worm1 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/02/2007, 06h23
  5. Update avec une sous requête
    Par Deejoh dans le forum Installation
    Réponses: 7
    Dernier message: 25/01/2006, 11h50

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