Petit soucis en SQL

Petit soucis en SQL - SQL/NoSQL - Programmation

Marsh Posté le 20-02-2004 à 13:32:03    

Mon je m'explique :
J'ai une table contenant les champ suivant :
 
une durée prévisionnelle
une durée réalisée
une durée absence
une date
une temoin qui peut prendre les valeurs suivantes : inscrit, demandé, réalisé, absent
 
j'ai trois requetes différente :
 
une permettant de trouver les heures réalisées pour chaque mois: c la somme des heures de la colonne durée réalisée pour les témoin realise et inscrit
 
une autre permettant de trouver les heures engagées pour chaque mois : différence entre la somme des heures de la colonne durée_prévisionnelle et de la somme des heures durée absence et durée_réalisée avec le temoin inscrit
 
une permettant de trouver les heures d'absence pour chaque mois: somme des heures de la colonne durée absence pour les témoin realise, inscrit et absent
 
et enfin une permettant de trouvé les heures demandées pour chaque mois : somme de la colonne durée prévue avec le temoin demande
 
toutes ces requetes me renvoie une valeur pour chaque mois suaf la dernière qui me renvoit une valeur que pour 9 mois.
 
je dois faire une requete qui se sert de toutes celles présentées précédemment pour ensuite faire un graphique mais à cause de la requete qui ne renvoit que 9 mois je perds 3 mois en cours de route et ej ne vois pas comment résoudre ca.
 
si quelqu'un a une idée ce serait sympa
 
merci d'avance  :jap:

Reply

Marsh Posté le 20-02-2004 à 13:32:03   

Reply

Marsh Posté le 20-02-2004 à 14:23:11    

:hello:
 
peut-être n'as tu que 9 mois où il y a des enregistrements avec 'demandé' ...
 
tu utilises quoi pour faire ton graphique ? excel ?

Reply

Marsh Posté le 20-02-2004 à 14:25:22    

dalcap a écrit :

:hello:
 
peut-être n'as tu que 9 mois où il y a des enregistrements avec 'demandé' ...
 
tu utilises quoi pour faire ton graphique ? excel ?
 


 
oui je n'ai que 9 mois pour les demandes mais il me faut quand meme les 12
j'utilise access c'est des grahiques fait à partir de requete pour que ce soit fait automatiquement à l'ouverture d'access

Reply

Marsh Posté le 20-02-2004 à 14:28:32    

ok, je ne sais pas si ça va marcher avec access, j'ai jamais fait de vba avec access...
 
j'imaginais un truc (avec excel) qui te permettrait d'afficher tes 3 premieres requetes en tableau, et ensuite de parcourir les mois et de faire une requete pour chaque mois égal au mois déjà présent dans le tableau...

Reply

Marsh Posté le 20-02-2004 à 14:31:00    

faut pas que j'utilise excel, sinon ce serait trop simple ;)

Reply

Marsh Posté le 20-02-2004 à 14:31:21    

enfin merci quand meme pour ton aide

Reply

Marsh Posté le 20-02-2004 à 14:36:39    

left outer join à un endroit de ta requête histoire d'émuler des "null" à la place des lignes manquantes.

Reply

Marsh Posté le 20-02-2004 à 14:37:53    

ok je vais essayer ca oui

Reply

Marsh Posté le 20-02-2004 à 15:00:58    

ca marche pas :cry:

Reply

Marsh Posté le 20-02-2004 à 15:30:40    

peux tu montrer le code de ta 4eme requete stp?

Reply

Marsh Posté le 20-02-2004 à 15:30:40   

Reply

Marsh Posté le 20-02-2004 à 15:32:43    

pas aujourd'hui parce que je m'en vais là et je suis un peu pressée, je verrai ca lundi !

Reply

Marsh Posté le 20-02-2004 à 16:21:00    

:ouch:  tu parts à 15h30, beh ça va...
 
sinon la méthode de MagicBuzz est la bonne
 
 :hello:

Reply

Marsh Posté le 23-02-2004 à 08:49:54    

quelqu'un peut me dire ce qui ne va pas dans ma requete (j'ai pas trop l'habitude d'utiliser "left outer join" ) :

Code :
  1. SELECT Sum(STAN_FINAL.DUREE_Prévisionnelle) AS Heures_demandées,  Format([STAN_final].[DATE_Début],"mmmm" ) AS Mois
  2. FROM STAN_FINAL left outer join mois on  Format([STAN_final].[DATE_Début],"mmmm" )= mois.mois
  3. WHERE (((STAN_FINAL.TEMOIN_STAN)="demande" ))
  4. GROUP BY  Format([STAN_final].[DATE_Début],"mmmm" );

Reply

Marsh Posté le 23-02-2004 à 10:12:22    

Salut
T'as quoi comme erreur avec ta requête ?
(qui me parait pas mal d'ailleurs ...)

Reply

Marsh Posté le 23-02-2004 à 10:13:13    

j'ai pas d'erreur en fait, je veux récupérer tous les mois meme si y'a pas de valeur dans stan final mais j'en ai que 9 au lieu de 12 ...
 
d'ailleurs la requete a été modifié :
 

Code :
  1. SELECT Sum(STAN_FINAL.DUREE_Prévisionnelle) AS Heures_demandées, Format([STAN_final].[DATE_Début],"mmmm" ) AS Mois
  2. FROM mois LEFT JOIN STAN_FINAL ON mois.mois= Format([STAN_final].[DATE_Début],"mmmm" )
  3. WHERE (((STAN_FINAL.TEMOIN_STAN)="demande" ))
  4. GROUP BY Format([STAN_final].[DATE_Début],"mmmm" );


Message édité par tchoupinette le 23-02-2004 à 10:13:51
Reply

Marsh Posté le 23-02-2004 à 10:18:55    

Et ça ça te donne quoi ?
SELECT Sum(STAN_FINAL.DUREE_Prévisionnelle) AS Heures_demandées, Format([STAN_final].[DATE_Début],"mmmm" ) AS Mois  
FROM mois LEFT JOIN STAN_FINAL ON mois.mois= Format([STAN_final].[DATE_Début],"mmmm" )  
WHERE (STAN_FINAL.TEMOIN_STAN="demande" or
STAN_FINAL.TEMOIN_STAN is null)  
GROUP BY Format([STAN_final].[DATE_Début],"mmmm" );  

Reply

Marsh Posté le 23-02-2004 à 10:45:21    

ca change rien ...

Reply

Marsh Posté le 23-02-2004 à 10:46:39    

c'est access qu'est tout pourri :o
 
a partir du moment ou tu fais un group by, il zappe les lignes ou le champ en question est null

Reply

Marsh Posté le 23-02-2004 à 10:47:00    

ouais et si je fais pas de group by, il rale :o

Reply

Marsh Posté le 23-02-2004 à 10:47:49    

ben forcément [:spamafote]
 
spour ca que l'équivalent du isnull de sql server ca aurait été pas mal


Message édité par HappyHarry le 23-02-2004 à 10:48:13
Reply

Marsh Posté le 23-02-2004 à 10:48:57    

ouais ... je vais me débrouiller autrement, on peut faire des join quand y'a plus de 2 tables à joindre ?

Reply

Marsh Posté le 23-02-2004 à 10:49:39    

ben euh oué

Reply

Marsh Posté le 23-02-2004 à 10:54:03    

j'ai essayé mais ca marche pas ... :/

Reply

Marsh Posté le 23-02-2004 à 10:56:06    

skoi ta requete ?

Reply

Marsh Posté le 23-02-2004 à 10:57:25    

ben je l'ai supprimé et je recommence celle ci ...

Reply

Marsh Posté le 23-02-2004 à 11:01:54    

la voila :
 
select ha.mois, ha.heures_absence, hd.heures_demandées, he.heures_engagées
from heures_demandées hd  
right join  heures_absence ha on ha.mois=hd.mois  
right join heures engagées he on he.mois=hd.mois;

Reply

Marsh Posté le 23-02-2004 à 11:03:21    

les joitures a droite c'est voulu ? :heink:

Reply

Marsh Posté le 23-02-2004 à 11:11:35    

vi c voulu pourquoi ?

Reply

Marsh Posté le 23-02-2004 à 11:12:18    

c plutot rare de les faire comme ca
en général elles sont en inner join ou en left/right outer join

Reply

Marsh Posté le 23-02-2004 à 11:15:26    

ben en fait access enlève le outer tout seul et le transorfe en left/right join tout court

Reply

Marsh Posté le 23-02-2004 à 12:37:20    

Toute façon tu y arriveras, avec Access, même
si ça peut sembler bancal parfois, tu fais tout
ce que tu veux avec !
 
=> Autre essai  
 
SELECT Sum(iif(STAN_FINAL.DUREE_Prévisionnelle is null,0,STAN_FINAL.DUREE_Prévisionnelle)) AS Heures_demandées, mois.mois AS Mois  
FROM mois LEFT JOIN STAN_FINAL ON mois.mois= Format([STAN_final].[DATE_Début],"mmmm" )  
WHERE (STAN_FINAL.TEMOIN_STAN="demande" or  
STAN_FINAL.TEMOIN_STAN is null)  
GROUP BY mois.mois;  

Reply

Marsh Posté le 23-02-2004 à 12:51:52    

toujours que 9 valeurs ...

Reply

Marsh Posté le 23-02-2004 à 12:54:20    

c bon j'ai résolu mon pb d'une autre manière grace à toi.
merci :jap:


Message édité par tchoupinette le 23-02-2004 à 12:54:34
Reply

Marsh Posté le 23-02-2004 à 13:03:54    

Ok c toujours ça ;-)

Reply

Marsh Posté le 23-02-2004 à 13:10:18    

:)

Reply

Marsh Posté le 23-02-2004 à 13:49:51    

un autre soucis pour la meme requete comment je peux faire pour avoir le cumulé de tous les mois plutot que la somme pour le mois en cours ?

Reply

Marsh Posté le 23-02-2004 à 13:50:40    

sum sur la table, sans faire la jointure ? :ange:

Reply

Marsh Posté le 23-02-2004 à 13:53:56    

:??:

Reply

Marsh Posté le 23-02-2004 à 13:55:33    

ben la somme tous mois confondus, ca revient a betement sommer le champ jesaisplusquoi de tous les enregistrements de ta table, non ? (moyennant les restrictions éventuelles supplémentaires)

Reply

Marsh Posté le 23-02-2004 à 13:56:43    

je veux le cumul par mois
en gros je veux  
janvier = janvier
février = février + janvier
mars = mars + février
...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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