[Access 2003] Problème Requête

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 )
Configuration: Windows XP
Internet Explorer 7.0

2 réponses

  1. La première requète se base non pas sur la table SALAIRE mais sur la table SALARIE !!
    0
    1. 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