Requète Access

Requète Access - SQL/NoSQL - Programmation

Marsh Posté le 18-12-2008 à 10:41:07    

Bonjour à tous,
J'ai une problème à résoudre, je vous le livre le plus clairement ici.
 
Dans Access 2003, j'utilise le requèteur pour créer mes requètes.
J'ai 3 tables existantes :
TABLE 1 - PERSONNELS
Idpersonnel (clé primaire)
Nom
Prénom
 
TABLE2 - CONTRATS
Idpersonnel (champ de liaison sur table personnels)
Date de départ
Date de fin
Tarifs
 
TABLE 3 - HEURES
Idpersonnel (champ de liaison sur table personnels)
Date
Heures effectuées
 
Une personne de la table personnel (unique) peut avoir de multiples contrats à de multiples tarifs, et une personne unique peut avoir plusieurs dates et heures effectuées.
Ici, donc des 2 cotés, relations 1 à N
 
Tout fonctionne
 
La requète !
 
Il faut dans une requète que j'obtienne un résultat me donnant :
pour une personne, lister toutes les dates et heures effectuées (pas de souci, tout simple), et sur la même ligne, vérifier la date travaillée et la faire correspondre au tarif de cette date dans la table contrat (et là, aie !)
 
Donc avec un exemple
 
MARCEL a 2 contrats :  
1er contrat du 1/1/2008 au 15/1/2008 à 15 € de l'heure
2e contrat du 16/1/2008 au 30/3/2008 à 18 € de l'heure
 
RENE a 3 contrats :  
1er contrat du 1/1/2008 au 30/2008 à 20 € de l'heure
2e contrat du 1/2/2008 au 30/5/2008 à 25 € de l'heure
 
MARCEL A TRAVAILLE :
Le 1/1/2008 7h
Le 2/1/2008 5h
Le 17/1/2008 8h
 
RENE A TRAVAILLE
Le 30/1/2008 3h
LE 5/2/2008 8h
 
La requète doit pouvoir me renvoyer le tableau
 
MARCEL 1/1/2008    7h    15€
MARCEL 2/1/2008    5h    15€
MARCEL 17/1/2008   8h    18€
RENE   30/1/2008    3h   20€
RENE   5/2/2008      8h    25€
 
Et je ne vois pas comment écrire la requète...
Merci de votre aide
Cordialement,
Chabi

Reply

Marsh Posté le 18-12-2008 à 10:41:07   

Reply

Marsh Posté le 18-12-2008 à 16:46:18    

Et hop :
 

SELECT Personnels.id_personne, Personnels.nom, Personnels.prenom, Heures.heure, Heures.[date], Contrats.tarif
FROM  Heures INNER JOIN  Personnels ON .Heures.id_personne = Personnels.id_personne INNER JOIN   Contrats ON  
Heures.id_personne = Contrats.id_personne AND Heures.[date] BETWEEN Contrats.datedeb AND Contrats.datefin


 
 
Moralité, le requeteur c'est bien mais pas top :O


Message édité par chapi le 18-12-2008 à 16:46:45

---------------
I drive at 88mph ! Just in case...
Reply

Marsh Posté le 18-12-2008 à 20:03:49    

Je vais tester ça et je reviens vous donner le résultat...
Et en tout cas, si ça marche, grande classe..

Reply

Marsh Posté le 19-12-2008 à 01:58:19    

Et bien....bravo !!!
J'ai du corriger 2, 3 choses dans le sql (parenthèses, AND remplacé par WHERE dans la clause BETWEEN), mais le résultat est là !
Merci de m'avoir remis la lumière !  
Ce qui est intéressant, c'est de voir que la clause between est traduite dans le requèteur. Par contre, c'est vrai qu'il est plus simple de la saisir dans le sql que de jongler avec les zones de textes du requèteur.
 
Donc, encore une fois Chapi, Merci !!! ;)

Reply

Marsh Posté le 19-12-2008 à 09:24:37    

Tu en doutais ? :O :D
 
Bizarre que tu aies eu à remplacer un AND ou mettre des parenthèses, car sous SQL cela passe nickel ainsi. Il y a bien une erreur dans ma requete, à savoir le point devant heures dans "FROM  Heures INNER JOIN  Personnels ON .Heures.id_personne = "
 
J'ai testé sous sql, et j'ai viré quelques dbo. pour que ce soit plus clair.....en oubliant de virer un point :D


Message édité par chapi le 19-12-2008 à 09:25:19

---------------
I drive at 88mph ! Just in case...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed