Besoin d'aide pour une requete SQL

Besoin d'aide pour une requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 29-04-2003 à 10:52:03    

Bonjour,
 
j'explique mon probleme :
 
j'ai 2 tables, T_section et T_conso, j'aimerai faire une requete qui affiche tous les elements (toutes les sections) de T_section ainsi que la somme de tous les champs "tps_passe" de T_conso qui ont pour section T_section
 
 
ex :
si dans T_section j'ai ca :
 
section:
380
381
382
383
 
 
et dans T_conso :
tps_passe :        section :
13.8                382
12.4                382
0.8                 381
0.98                383
456.21              382
 
 
j'aimerai que ca affiche ca :
380           0
381           0.8
382           482.41
383           0.98
 
 
Le probleme c'est que ma requete n'affiche pas la ligne 380 puisque celle ci n'est pas presente dans la table T_conso....comment faire pour lui faire afficher 0???
 
 
Voici ma requete  

Citation :

SELECT C.sect_empl, ARRONDI(sum(C.tps_passe),1) AS J
FROM T_conso AS C, T_section AS S
WHERE S.num_section=C.sect_empl  
GROUP BY C.sect_empl;


Message édité par les_valseuses le 29-04-2003 à 10:53:58
Reply

Marsh Posté le 29-04-2003 à 10:52:03   

Reply

Marsh Posté le 29-04-2003 à 10:54:19    

LEFT JOIN Powa !
 
C'est quoi ton SGBD ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-04-2003 à 10:55:33    

Tu es sous quoi ?
Oracle, sql server, access ...

Reply

Marsh Posté le 29-04-2003 à 10:58:10    

Acces.... :(

Reply

Marsh Posté le 29-04-2003 à 11:02:33    

SELECT C.sect_empl, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY C.sect_empl;

Reply

Marsh Posté le 29-04-2003 à 11:06:58    

merci, mais ca marche pas, ca m'affiche pas les lignes ou il n'y a aucune resultat..... :(
 
Voici ma requete au complet (y'a des trucs en plus qui ont rien a voir..)
 

Citation :

SELECT C.sect_empl, ARRONDI(sum(nz(C.tps_passe,0)),1) AS J
FROM T_section AS S LEFT JOIN T_conso AS C ON S.num_section=C.sect_empl
WHERE tache Like "903INT*" AND C.mois= (SELECT max(mois) FROM T_conso)
GROUP BY C.sect_empl;

Reply

Marsh Posté le 29-04-2003 à 11:13:05    

vttman2 a écrit :

SELECT C.sect_empl, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY C.sect_empl;
 


 
ça sera sans doute mieux comme ça ...
 
SELECT T.num_section, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY T.num_section;


Message édité par vttman2 le 29-04-2003 à 11:15:02
Reply

Marsh Posté le 29-04-2003 à 11:15:23    

vttman2 a écrit :


 
ça sera sans doute mieux comme ça ...
 
SELECT T.sect_empl, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY T.sect_empl;


 :pt1cable:  
c'est S et C les préfixes, pas T???

Reply

Marsh Posté le 29-04-2003 à 11:17:48    

Ouhais je suis en plein délire  :pt1cable:  
 
Donc au final :
 
SELECT S.num_section, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY S.num_section;

Reply

Marsh Posté le 29-04-2003 à 11:18:36    

j'ai essayé de mettre S.num_section dans le group by au lieu du C.sect_empl mais ca change rien....
 

Citation :

SELECT S.num_section, ARRONDI(sum(nz(C.tps_passe,0)),1) AS J
FROM T_section AS S LEFT JOIN T_conso AS C ON S.num_section=C.sect_empl
WHERE tache Like "903INT*" AND C.mois= (SELECT max(mois) FROM T_conso)
GROUP BY S.num_section;

Reply

Marsh Posté le 29-04-2003 à 11:18:36   

Reply

Marsh Posté le 29-04-2003 à 11:19:35    

vttman2 a écrit :

Ouhais je suis en plein délire  :pt1cable:  
 
Donc au final :
 
SELECT S.num_section, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY S.num_section;
 


ben ca marche pas :D
 
sinon ca sert a quoi nz???
c'est pas plutot nvl qu'il faudrait mettre???

Reply

Marsh Posté le 29-04-2003 à 11:20:52    

les_valseuses a écrit :


ben ca marche pas :D
 
sinon ca sert a quoi nz???
c'est pas plutot nvl qu'il faudrait mettre???


access connait pas nvl...

Reply

Marsh Posté le 29-04-2003 à 11:23:40    

Kes ki marche pas ?
Kel num section par exemple n'apparait pas ?
 
nz c'est pour mettre 0 si on a une valeur null

Reply

Marsh Posté le 29-04-2003 à 11:26:17    

vttman2 a écrit :

1)Kes ki marche pas ?
2)Kel num section par exemple n'apparait pas ?
 
3)nz c'est pour mettre 0 si on a une valeur null
 


1) Ben ca n'affiche pas les numéros de sections qui ne sont pas dans la table T_conso
2) Dans mon exemple le 380 ne s'affiche pas vu qu'il n'y a aucun 380 dans la table T_conso, et meme avec le left join ca marche pas...
3) alors le nz c'est l'equivalent du nvl sous oracle...
 
merci qd meme :hello:

Reply

Marsh Posté le 29-04-2003 à 11:41:34    

j'ai ca :
 
si dans T_section j'ai ca :
 
section:
380
381
382
383
 
 
et dans T_conso :
tps_passe :        section :
13.8                382
12.4                382
0.8                 381
0.98                383
456.21              382
 
 
j'aimerai que ca affiche ca :
380           0
381           0.8
382           482.41
383           0.98
 
 
mais ca m'affiche ca :
381           0.8
382           482.41
383           0.98
 
 
Help !!!! :( :( :(

Reply

Marsh Posté le 29-04-2003 à 12:33:00    

SELECT S.num_section, sum(nz(C.tps_passe,0))
FROM  T_section AS S left join T_conso AS C
on S.num_section=C.sect_empl  
GROUP BY S.num_section;
 
Moi ça me donne ça , avec ton jeu d'essai  :sweat:  
 
 
 
num_section Expr1001
380 0
381 0,8
382 482,41
383 0,98
 


Message édité par vttman2 le 29-04-2003 à 12:33:42
Reply

Marsh Posté le 29-04-2003 à 12:42:30    

SELECT T_section.num_section, Sum(Nz([tps_passe])) AS J
FROM T_section LEFT JOIN T_conso ON T_section.num_section = T_conso.sect_empl
GROUP BY T_section.num_section;
 
Pareil testé chez moi sous access97 et ca me donne
 

Code :
  1. num_section   J
  2. 380           0
  3. 381           0,8
  4. 382         482,41
  5. 383           0,98

Reply

Marsh Posté le 29-04-2003 à 13:22:57    

patbasi a écrit :

SELECT T_section.num_section, Sum(Nz([tps_passe])) AS J
FROM T_section LEFT JOIN T_conso ON T_section.num_section = T_conso.sect_empl
GROUP BY T_section.num_section;
 
Pareil testé chez moi sous access97 et ca me donne
 

Code :
  1. num_section   J
  2. 380           0
  3. 381           0,8
  4. 382         482,41
  5. 383           0,98




 
Chez moi ca marche pas....
 
ca pourrait pas venir de mon WHERE?????
 

Citation :

SELECT [T_section].[num_section], ARRONDI(Sum(Nz([tps_passe])),1) AS J
FROM T_section LEFT JOIN T_conso ON [T_section].[num_section]=[T_conso].[sect_empl]
WHERE tache Like "903INT*" AND T_conso.mois= (SELECT max(mois) FROM T_conso)
GROUP BY [T_section].[num_section];

Reply

Marsh Posté le 29-04-2003 à 13:28:26    

les_valseuses a écrit :


 
Chez moi ca marche pas....
 
ca pourrait pas venir de mon WHERE?????


 
Fais par étape: essaie sans le were et si ca marche, ensuite seulement regarde avec le where

Reply

Marsh Posté le 29-04-2003 à 13:28:29    

Y'a des chances !
 
SELECT [T_section].[num_section], ARRONDI(Sum(Nz([tps_passe])),1) AS J  
FROM T_section LEFT JOIN T_conso ON [T_section].[num_section]=[T_conso].[sect_empl]  
WHERE ( tache Like "903INT*" AND T_conso.mois= (SELECT max(mois) FROM T_conso) )  OR T_conso.mois IS null
GROUP BY [T_section].[num_section];  
 
Un truc dans le genre...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-04-2003 à 13:34:32    

patbasi a écrit :


 
Fais par étape: essaie sans le were et si ca marche, ensuite seulement regarde avec le where


je peux pas :(
j'ai une base de 1600 enregistrements et si je vire le where j'ai des resultats pour chaque section...
 
 
 
Sinon le mois n'est jamais null donc je ne pense pas que ca vienne de la....

Reply

Marsh Posté le 29-04-2003 à 13:36:56    

les_valseuses a écrit :


Sinon le mois n'est jamais null donc je ne pense pas que ca vienne de la....


 
Et si !
 
Il EST NULL pour les enregs qui n'ont pas de correspondance !
 
Sinon, tu n'aurais pas à utiliser de LEFT JOIN...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-04-2003 à 13:43:58    

Mara's dad a écrit :


 
Et si !
 
Il EST NULL pour les enregs qui n'ont pas de correspondance !
 
Sinon, tu n'aurais pas à utiliser de LEFT JOIN...


Ok, je vais essayer, sinon j'ai essayé de faire une requete qui renvoie les resultats correspondant au WHERE :
 

Citation :

SELECT [T_conso].[idconso], [T_conso].[code_empl], [T_conso].[nom], [T_conso].[sect_empl], [T_conso].[tache], [T_conso].[mois], [T_conso].[tps_passe], [T_conso].[lib_tache], [T_conso].[sect_maitre], [T_conso].[statut], [T_conso].[cdact]
FROM T_conso
WHERE ((([T_conso].[tache]) Like "903INT*" ) AND  T_conso.mois= (SELECT max(mois) FROM T_conso));


 
 
et ensuite de baser ma requete le dessus :
 

Citation :

SELECT C.sect_empl, ARRONDI(sum(C.tps_passe),1) AS J, S.resp
FROM R_conso_comme_903int_mois AS C, T_section AS S
GROUP BY C.sect_empl, S.resp;


 
mais ca ne marche toujours pas (ca m'affiche pas les lignes qui n'ont pas de resultat...)
 
Bon, je teste le coup du mois isnull et je reviens :hello:

Reply

Marsh Posté le 29-04-2003 à 13:48:26    

bon, deja je viens de me rendre compte qu'au dessus j'ai pas mis la bonne requete et sinon le mois is null ne marche pas non plus :(.....

Reply

Marsh Posté le 29-04-2003 à 13:50:30    

avec la bonne requete ca marche, mais il ne veut pas de ma fonction ARRONDI... :fou:

Reply

Marsh Posté le 29-04-2003 à 13:55:22    

les_valseuses a écrit :

avec la bonne requete ca marche, mais il ne veut pas de ma fonction ARRONDI... :fou:  


 
Yes, en SQL, il faut mettre les noms de fonction en Anglais.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 29-04-2003 à 13:59:53    

Mara's dad a écrit :


 
Yes, en SQL, il faut mettre les noms de fonction en Anglais.

nan, c'est une fonction a moi ca, elle marche ailleurs, mais j'ai compris pkoa la elle marchait pas :
 
j'ai copier/coller le code vttman2 :
 

Citation :

SELECT S.num_section, ARRONDI(sum(nz(C.tps_passe,0),1)) AS J  
FROM  T_section AS S left join T_conso AS C  
on S.num_section=C.sect_empl    
GROUP BY S.num_section;  


 
et y'avait un pb de parenthese ds l'arrondi...
 
par contre j'ai une autre couille : qd j'execute la requete ca marche, par contre ds l'etat associé a la requete il me demande la valeur de marequete.sect_empl........

Reply

Marsh Posté le 29-04-2003 à 14:11:17    

Alors la vraiment y'a un truc que je comprends pas....
 
Voici ma sous requete :
 

Citation :

SELECT [T_conso].[idconso], [T_conso].[code_empl], [T_conso].[nom], [T_conso].[sect_empl], [T_conso].[tache], [T_conso].[mois], [T_conso].[tps_passe], [T_conso].[lib_tache], [T_conso].[sect_maitre], [T_conso].[statut], [T_conso].[cdact]
FROM T_conso
WHERE ((([T_conso].[tache]) Like "903INT*" ) AND  T_conso.mois= (SELECT max(mois) FROM T_conso));


 
 
Voici ma requete :
 

Citation :

SELECT S.num_section, ARRONDI(sum(nz(C.tps_passe,0)),1) AS J
FROM T_section AS S LEFT JOIN R_conso_comme_903int_mois AS C ON S.num_section=C.sect_empl
GROUP BY S.num_section;


 
Si je lance la requete comme ca, ca marche!!!
 
et mon etat basé sur cette requete plus 5 autres comme celles au dessus, lui me demande la valeur de marequete.sect_empl!!!!
 
Pourquoi il me le demande la alors que ca marche niquel sinon????

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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