[Access 2003] Problème Requête

Fermé
marçoin4733 Messages postés 2 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 avril 2007 - 27 mars 2007 à 11:04
marçoin4733 Messages postés 2 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 avril 2007 - 1 avril 2007 à 16:20
Bonjour,
je suis étudiant en BTS au Lycée gustave eiffel.
Lors d'un cours de dev, un problème est survenu lors du résultat d'une requete.
Ce résultat ne correspondait pas à celui attendu par le professeur.

voici la table sur laquelle s'execute la requete

exemples de la table :
http://img201.imageshack.us/img201/8754/tableia9.th.jpg

mauvais résultat
http://img300.imageshack.us/img300/8391/mauvaisdj8.th.jpg

bon résultat
http://img257.imageshack.us/img257/6808/boncf8.th.jpg


CREATE TABLE SALARIE
(NumSalarie INT CONSTRAINT clefprimaire PRIMARY KEY,
NomSalarie VARCHAR(22),
Salaire CHAR(22));

voici la requete

SELECT COUNT(*) AS Rang, S1.Salaire AS MontantSalaire
FROM SALARIE AS S1, SALARIE AS S2
WHERE S1.Salaire<S2.Salaire
GROUP BY S1.Salaire
HAVING COUNT(*)<=3
ORDER BY S1.Salaire DESC;

le resultat à obtenir grace à cette requete est les trois premiers salaires de cette table

le problème est que le premier salaire est "zappé" , c'est à dire que le résultat nous affiche les deuxième, troisième et quatrième plus gros salaire.

un élève a créé cette table differement
la voici

CREATE TABLE SALARIE
(NumSalarie INTEGER CONSTRAINT clefPrimaire PRIMARY KEY,
NomSalarie CHAR(20),
Salaire CHAR(20));

voici sa requete

SELECT COUNT (*) AS Rang, S1.SALAIRE AS MontantSalaire
FROM SALAIRE AS S1, SALAIRE AS S2
WHERE S1.SALAIRE < S2.SALAIRE
GROUP BY S1.SALAIRE
HAVING COUNT (*) <= 3
ORDER BY S1.SALAIRE DESC;

le changement outre le nom de la table est le type de l'attribut salaire qui cette fois-ci est en CHAR ( pas en INT comme dans la première )

et cette requete affiche le bon résultat

question posé par le professeur

pourquoi le résultat n'est pas le bon sur la première requete et est correct sur la deuxième ? ( on ne pense pas que c'est à cause du type de l'attribut salaire )

2 réponses

ruzakruzak Messages postés 459 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 31 mai 2007 246
27 mars 2007 à 11:29
La première requète se base non pas sur la table SALAIRE mais sur la table SALARIE !!
0
marçoin4733 Messages postés 2 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 avril 2007
1 avril 2007 à 16:20
merci pour avoir prêter attention à notre problème.
j'ai mal posé ma question ! oublions la deuxième table avec sa requete
je reformule donc ma question :

comment se fait-il que l'on arrive pas à avoir un bon résultat avec la première requete ?

( CREATE TABLE SALARIE
(NumSalarie INT CONSTRAINT clefprimaire PRIMARY KEY,
NomSalarie VARCHAR(22),
Salaire CHAR(22));

voici la requete

SELECT COUNT(*) AS Rang, S1.Salaire AS MontantSalaire
FROM SALARIE AS S1, SALARIE AS S2
WHERE S1.Salaire<S2.Salaire
GROUP BY S1.Salaire
HAVING COUNT(*)<=3
ORDER BY S1.Salaire DESC;

le resultat à obtenir grace à cette requete est les trois premiers salaires de cette table

le problème est que le premier salaire est "zappé" , c'est à dire que le résultat nous affiche les deuxième, troisième et quatrième plus gros salaire. )

merci d'avance pour ceux qui vont tenter de nous aider
0