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 :

Pb Sub-request : ne s'applique pas a un seul champ


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [Résolu] Pb Sub-request : ne s'applique pas a un seul champ
    Bonjour,

    Je vous presente le code, et ensuite le probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT employee.LAST_NAME, employee.FIRST_NAME, employee.EMPLOYEE, employee.DEPARTMENT, (SELECT DISTINCTROW SUM(DAILY.OT) FROM DAILY INNER JOIN employee ON DAILY.EMPLOYEE = employee.EMPLOYEE WHERE ((DAILY.DATE) BETWEEN #9/23/2002# AND #9/30/2002#)) AS A_WEEK, (SELECT DISTINCTROW SUM(DAILY.OT) FROM DAILY INNER JOIN employee ON DAILY.EMPLOYEE = employee.EMPLOYEE WHERE ((DAILY.DATE) BETWEEN #9/9/2002# AND #9/30/2002#)) AS T_WEEKS
    FROM DAILY INNER JOIN employee ON DAILY.EMPLOYEE = employee.EMPLOYEE
    GROUP BY employee.LAST_NAME, employee.FIRST_NAME, employee.EMPLOYEE, DAILY.DATE, employee.DEPARTMENT;
    Vous pouvez voir ainsi que j'utilise deux sous-requetes au sein de ma requete, a savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCTROW SUM(DAILY.OT) FROM DAILY INNER JOIN employee ON DAILY.EMPLOYEE = employee.EMPLOYEE WHERE ((DAILY.DATE) BETWEEN #9/23/2002# AND #9/30/2002#)
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCTROW SUM(DAILY.OT) FROM DAILY INNER JOIN employee ON DAILY.EMPLOYEE = employee.EMPLOYEE WHERE ((DAILY.DATE) BETWEEN #9/9/2002# AND #9/30/2002#)
    Le probleme est que ces deux sous-requetes ne s'appliquent pas a chaque employer, comme je le voudrais, mais effectuent un calcul pour l'ensemble des employers (et donc j'obtiens x fois le meme nombre de A_WEEK et de T_WEEKS. Pas cool quoi.
    Ce ne doit pas etre bien complique, j'en conviens, mais apres recherches sur le forum et les tuto (peut-etre mauvaises vu l'heure...), je vous demande un petit coup de main qui me donnera un sacre coup de booste pour mon projet (vous ne pouvez pas savoir a quel point).

    Merci d'avance.

    Zubral

  2. #2
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    J'ai du mal à saisir la requête, là, si tu pouvais dire ce q'uelle doit faire...

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Desole, je vais etre un peu plus precis (surtout que c'est un peu un bloc) :

    Cette requete est sensee faire apparaitre :
    Le nom et le prenom de l'employer (LAST_NAME et FIRST_NAME), le numero de l'employer (EMPLOYEE), son departement dans l'entreprise (DEPARTMENT), et ensuite les deux sous-requetes ont pour objectif de calculer :
    Le depassement du temps de travail sur une semaine (du 23 septembre 2002 au 30 septembre 2002, mais apres cela sera calculer sur la derniere semaine a compter de la date de l'ordinateur). OT correspond a OverTime.
    Le depassement du temps de travail sur 3 semaines.

    La table daily enregistre le nombre d'heure de travail ainsi que le depassement horaire journalier de chacun.

    Exemple :
    Jour 1 | Personne1 | 8h03 de travail | depassement de 3 minutes
    Jour 1 | Personne2 | 7h45 de travail | depassement de 0 minutes
    Jour 1 | Personne3 | 8h17 de travail | depassement de 17 minutes
    Jour 2 | Personne1 | 7h59 de travail | depassement de 0 minutes
    Jour 2 | Personne3 | 8h05 de travail | depassement de 5 minutes
    Jour 3....
    ... Jour 7

    Je souhaite obtenir :
    Personne 1 | 3 minutes sur une semaine | 14 minutes sur 3 semaines
    Personne 2 | 0 minutes sur une semaine | 3 minutes sur 3 semaines
    Personne 3 | 35 minutes sur une semaine| 1h14 sur 3 semaines

    En gros, faire la somme pour chaque employer de son temps de depassement sur une et trois semaines (vu que j'ai le temps au jour le jour).

    Est-ce que c'est plus clair ?

    Merci bien tout de meme.

    Par contre je ne vais pas tarder a rentrer chez moi, donc je verrai peut-etre vos reponses demain (il est 18 a Bucarest).

    Bonne soiree.

    Zubral

  4. #4
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Salut,

    Donc, si j'ai bien compris le problème, j'ai une requête qui marche. Elle est un peu hard, et doit pouvoir se simplifier. Mais, je n'ai pas le temps de regarder plus. En tout cas, ça devrait t'aider.
    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
     
    SELECT employee.LAST_NAME, employee.FIRST_NAME, 
       employee.EMPLOYEE, employee.DEPARTMENT, A_WEEKS.OT, 
       T_WEEKS.OT
    FROM employee, 
          (SELECT SUM(DAILY.OT) AS OT , employee.employee FROM DAILY   
       INNER JOIN employee ON employee.EMPLOYEE =  DAILY.EMPLOYEE 
       WHERE DAILY.DATE BETWEEN #9/23/2002# AND #9/30/2002# GROUP 
       BY employee.employee) AS A_WEEKS,
           (SELECT SUM(DAILY.OT) AS OT, employee.employee FROM DAILY 
       INNER JOIN employee ON employee.EMPLOYEE =  DAILY.EMPLOYEE 
       WHERE DAILY.DATE BETWEEN #9/9/2002# AND #9/30/2002# GROUP 
       BY employee.employee)  AS T_WEEKS
    WHERE employee.employee=A_WEEKS.employee AND 
       employee.employee = T_WEEKS.employee;
    Voilà, salut.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Alors la merci, merci et merci.
    Tu peux pas savoir comment je suis content d'avoir ma requete qui fonctionne (enfin j'imagine que si, tu sais).
    Bonne journee a toi, et encore merci, tu m'as vraiment tire un tronc du pied.

  6. #6
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    N'oublies pas la balise résolu. Salut.

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

Discussions similaires

  1. class qui ne s'applique pas sous opéra pour les <tr>?
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/03/2006, 17h55
  2. WSUS : client n'applique pas la GPO
    Par Zolex dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 09/08/2005, 17h07
  3. [CSS] 1er style défini ne s'applique pas
    Par CTux dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 11/07/2005, 11h40
  4. Réponses: 13
    Dernier message: 20/07/2004, 09h54
  5. URGENT : Request.Form ne marche pas sous IE6
    Par Laurent Outan dans le forum ASP
    Réponses: 9
    Dernier message: 16/07/2004, 16h25

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