> Tous les forumsForum des Webmasters

 Requete et ASP
Statut du sujet : NON RESOLU Imprimer
 fwbbwf
  Posté le 26/11/2004 @ 11:20  
 Petit astucien

2 Messages
Bonjour, Une nouvelle fois je fais appel à vos compétence. Pour résumer : J'ai 2 tables access : WPERS (Matricule, NOM_PRENOM, ...) et EV_CUMUL (Matricule,SOLD_SOLD, SOLD_COUR,...et NUM_SOLD qui peut prendre la valeur 1, 2, 3 ou 4). Je fais ensuite une requete : <% sql = "SELECT DISTINCT WPERS.NOM_PRENOM, WPERS.SERVICE, WPERS.MATRICULE," sql = sql + "EVCUMUL.MATRICULE, EVCUMUL.NUM_SOLD, EVCUMUL.SOLD_DROIT, EVCUMUL.SOLD_PREC," sql = sql + "EVCUMUL.SOLD_COUR, EVCUMUL.SOLD_SOLD" sql = sql + " FROM WPERS, EVCUMUL" sql = sql + " WHERE ((WPERS.SERVICE LIKE 'SES%' OR WPERS.SERVICE LIKE 'SAR%' OR WPERS.SERVICE LIKE 'SED%' OR WPERS.SERVICE LIKE 'DIR%')" sql = sql + " AND (EVCUMUL.MATRICULE=WPERS.MATRICULE)" 'sql = sql + ")" sql = sql + " AND (EVCUMUL.NUM_SOLD=1 OR EVCUMUL.NUM_SOLD=4)" 'response.write sql Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sql, conn, 3, 3 Set Session("Badgeages_rs") = rs %> Ensuite voici ce que je récupère : <tr> <TD BORDERCOLOR=#6633CC ALIGN=RIGHT width="106"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("MATRICULE").Value)%></FONT> </TD> <TD BORDERCOLOR=#6633CC ALIGN=RIGHT width="127"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("NOM_PRENOM").Value)%></FONT></p> </TD> <TD BORDERCOLOR=#6633CC ALIGN=RIGHT width="72"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("SERVICE").Value)%></FONT></p> </TD> <TD BORDERCOLOR=#c0c0c0 ALIGN=RIGHT width="125"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("SOLD_PREC").Value)%></FONT></p> </TD> <TD BORDERCOLOR=#c0c0c0 ALIGN=RIGHT width="122"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("SOLD_COUR").Value)%></FONT></p> <TD BORDERCOLOR=#c0c0c0 ALIGN=RIGHT width="109"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("SOLD_SOLD").Value)%></FONT></p> </TD> <TD BORDERCOLOR=#c0c0c0 ALIGN=RIGHT width="37"> <p align="center"><FONT SIZE=2 FACE="Arial" COLOR=#000000><%=Server.HTMLEncode(rs.Fields("SOLD_COUR").Value)%></FONT></p> </TD> </tr> Dans ce cas là j'ai 2 lignes pour chaque matricule, ce que je ne veux pas. Si je fais 2 requetes une avec NUM_SOLD=1 et l'autre avec NUM_SOLD=4 alors le second SOLD_COUR correspond au premier matricule pour toutes les lignes donc pour tous les matricules. Je tourne en rond. Merci de m'éclairer. Pipouche
 Afficher le profil de fwbbwfEnvoyer un message privé à fwbbwf
 
 
Publicité
 koala01  Posté le 26/11/2004 à 18:47  
Astucien

4715 Messages
Salut, Je ne sais pluus si access supporte les requete avec sous requete, mais s'il les accepte (et à défaut d'utiliser les jointures), ce pourrait etre la solution à ton problème... L'idée est que les enregistrement de la table evcumul sont ceux qui ressortent d'une requete effectuée sur wpers et donc de demander à effectuer la requete finale sur base du résultat d'un autre requete. Cela a l'énorme avantage de structurer beaucoup mieu la requete [clindoeil] Voici ce que ca donnerait:
SELECT DISTINCT WPERS.NOM_PRENOM, WPERS.SERVICE, WPERS.MATRICULE, EVCUMUL.MATRICULE, EVCUMUL.NUM_SOLD, EVCUMUL.SOLD_DROIT, EVCUMUL.SOLD_PREC, EVCUMUL.SOLD_COUR, EVCUMUL.SOLD_SOLD FROM WPERS, EVCUMUL WHERE evcumul.matricule in (SELECT MATRICULE FROM WPERS WHERE SERVICE LIKE 'SES%' OR SERVICE LIKE 'SAR%' OR SERVICE LIKE 'SED%' OR SERVICE LIKE 'DIR%')
Et les explications qui vont avec:
(SELECT MATRICULE FROM WPERS WHERE SERVICE LIKE 'SES%' OR SERVICE LIKE 'SAR%' OR SERVICE LIKE 'SED%' OR SERVICE LIKE 'DIR%')
aura pour but de ne sortir que les identifiant des gens qui font partie du service concerné, c'est à direcommencant par ses, sar, sed, dir ... D'ailleurs, si il n'y a qu'un service qui correspond à chaque début de mot, et que tu t'assure que le nom des services est systématiquement écrit de la meme manière, ca pourrait avantageusement etre remplacé par WHERE service in ('nom_du_service1','nom_du_service2','nom_du_service3','nom_du_service4',...) Cette requete sera effectuée en tout premier et le résultat sera transmis à la requete principale qui sélectionnera les enregistrements correspondant dans les deux tables Je ne sais pas si tu sera de mon avis, mais, l'indentation aidant, je trouve que c'est quand meme autrement plus clair (et que meme sans indentation, il y a moyen de comprendre plus facilement la requete) [clindoeil]
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page