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 :

Requete avec données inconnue


Sujet :

Langage SQL

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut Requete avec données inconnue
    Bonjour, j'ai une requete à éffectuer qui me semble compliquer et assez long à expliquer, je suis sous PostgreSQL.

    Si vous pouviez m'aider à la construire petit à petit afin, que je puisse également aprendre où me renvoyer sur les bons tutos, d'avance je vous remercie.

    le contexte :

    je dois encoder le nombres d'heures effectuer par des stagiaires, puis par la suite faire le calcul suivant une période données.

    de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT parnom,parprenom, SUM(regheure) AS Heures
    FROM participant,registre
    WHERE regjour >='2005-01-1' AND regjour <='2005-01-31'
    AND participant.idparticipant=registre.idparticipant
    GROUP BY parnom,parprenom
    ORDER BY parnom ASC

    mais chaque participant à ses caractéristiques, notament la signature d'un contrat, je pauffine donc comme ceci :

    le contrat est l'attribut dosF70bis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT parnom,parprenom, SUM(regheure) AS HeuresF70LE
    FROM participant,registre,dossier,contrat
    WHERE regjour >='2005-01-1' AND regjour <='2005-01-31'
    AND dosf70bis='oui'
    AND cotypecontrat ='F70 BISLE'
    AND participant.idparticipant=registre.idparticipant
    AND participant.idparticipant=dossier.idparticipant
    AND dossier.idparticipant=registre.idparticipant
    AND participant.idparticipant=contrat.idparticipant
    GROUP BY parnom,parprenom
    ORDER BY parnom ASC
    là, où je bloque, c'est que quand le participant signe un contrat, il a peut-être déja eu des cours, et donc on ajoute la date à la signature du contrat "dosdatef70bis", je voudrais donc calculer les heures séparément, avant la signature et après la signature, tout en sachant que je connais pas cette date.

    en esperant avoir été clair.

    merci de votre aide

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Ne connaissant pas particulièrement PostgreSQL, j'ai utilisé une syntaxe normée. J'ai aussi supposé que la table Contrat contenait la date du contrat : DateContrat.

    Essaye :
    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
    18
    19
    SELECT parnom, parprenom, 
           SUM(CASE WHEN regjour < DateContrat 
                    THEN regheure
                    WHEN DateContrat IS NULL 
                    THEN regheure
                    ELSE 0
               END) AS HeureAvant,
           SUM(CASE WHEN regjour >= DateContrat 
                    THEN regheure
                    ELSE 0
               END) AS HeureApres
    FROM participant p INNER JOIN registre r ON p.idparticipant = r.idparticipant
                       LEFT JOIN  dossier  d ON p.idparticipant = d.idparticipant
                                            AND dosf70bis='oui'
                       LEFT JOIN  contrat  c ON p.idparticipant = c.idparticipant
                                            AND cotypecontrat ='F70 BISLE'
    WHERE regjour BETWEEN '2005-01-1' AND '2005-01-31' 
    GROUP BY parnom, parprenom 
    ORDER BY parnom ASC

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    merci de ton aide, effectivement j'ai bien un date contrat, mais qui se trouve dans la table dossier "dosdatef70bis".

    Ton code fonctionne à merveille, donc une première partie est résolue.

    La suite serais de pouvoir subdiviser le contrat en 2 parties, ceux qui ont un contrat "F70 BISLE" et un contrat "F70 BISAlpha".

    Donc rajouter une troisième collone dans le calcul des heures.

    merci de ton aide.


    ps: connais-tu un tuto sur le "When", pour un newbie, je ne connais vraiment que la base.

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu peux regarder et tu fais une recherche sur Case dans la page.

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour, merci pour le lien.

    J'ai donc fais ceci :

    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
    18
    19
    20
    21
    22
    23
    24
    SELECT parnom, parprenom,
           SUM(CASE WHEN regjour < dosdatef70bis
                    THEN regheure
                    WHEN dosdatef70bis IS NULL
                    THEN regheure
                    ELSE 0
               END) AS Heures,
           SUM(CASE WHEN regjour >= dosdatef70bis AND cotypecontrat ='F70 BISLE'
                    THEN regheure
                    ELSE 0
               END) AS F70BIS_LE,
     
    	SUM(CASE WHEN regjour >= dosdatef70bis AND cotypecontrat ='F70 BISAlpha'
                    THEN regheure
                    ELSE 0
               END) AS F70BIS_Alpha
    FROM participant p INNER JOIN registre r ON p.idparticipant = r.idparticipant
                       LEFT JOIN  dossier  d ON p.idparticipant = d.idparticipant
     
                       LEFT JOIN  contrat  c ON p.idparticipant = c.idparticipant
     
    WHERE regjour BETWEEN '2005-01-16' AND '2005-01-31'
    GROUP BY parnom, parprenom
    ORDER BY parnom ASC
    Questions: est-ce que le fait de mettre deux conditions dans le when pose problème?

    merci de ton aide.

    MaitrePylos

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye.
    Mais a priori, cela ne devrait pas poser de problème.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    un grand merci

    Bonne soirèe à toi

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

Discussions similaires

  1. Requete Mise à jour avec données décimales
    Par Bernardtapis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/11/2007, 14h47
  2. Réponses: 2
    Dernier message: 26/06/2007, 16h23
  3. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  4. optimisation requetes avec base de données
    Par flogreg dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 05/07/2005, 14h54
  5. requete avec ibquery 'colonne inconnue'???
    Par mvg dans le forum InterBase
    Réponses: 2
    Dernier message: 01/02/2004, 17h45

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