| | 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
| | |
| |
| 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] | | | |
| | 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
|
|