Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1897 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete SQL qui ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete SQL qui ne fonctionne pas

n°630119
MauditOsti​e
Posté le 03-02-2004 à 20:29:08  profilanswer
 

J'ai une requete SQL
SELECT top 10 resultat.NoJoueur,
       resultat.hit,
       count (resultat.nojoueur) as TotalPre,
       joueurs.prenom,
       joueurs.nom,
       EquipeMstr.NomEquipe
      FROM resultat, joueurs, EquipeDetl, EquipeMstr
      WHERE (resultat.NoJoueur = joueurs.NoJoueur) and
            (EquipeDetl.NoJoueur = Resultat.NoJoueur and
        EquipeDetl.Annee = " & session.Contents("Annee" ) & " ) and
           (EquipeMstr.NoEquipe = EquipeDetl.NoEquipe)
     GROUP BY resultat.NoJoueur.
 
Qui ne fonctionne pas. Ce qui ne marche pas c'est la fonction Count. Quand j'enleve le count et le Group by tout fonctionne a merveille! SQL me renvoit un message comme quoi le champ apres le count n'est pas contenu dans un agregat blablabla  :pt1cable:  
 


---------------
MauditOstie... Progress Rules
mood
Publicité
Posté le 03-02-2004 à 20:29:08  profilanswer
 

n°630177
jagstang
Pa Capona ಠ_ಠ
Posté le 03-02-2004 à 20:56:07  profilanswer
 

un fonction d'aggreagation regroupe plusieurs valeurs, c'est pour ça que pour chaque fonction d'aggrétation utilisée, il faut un group by correspondant.  
 
COUNT(machin)  --> GROUP BY(machin)

n°630191
MauditOsti​e
Posté le 03-02-2004 à 20:59:28  profilanswer
 

Ouiais je sais, c'est pourquoi j'ai mon

Citation :

count (resultat.nojoueur) as TotalPre,  
ET GROUP BY resultat.NoJoueur.  


 
Toutefois MSSQL semble ne pas aimer ma string!


---------------
MauditOstie... Progress Rules
n°630206
jagstang
Pa Capona ಠ_ಠ
Posté le 03-02-2004 à 21:01:59  profilanswer
 

attention à placer au bon endroit le GROUP BY

n°630210
jagstang
Pa Capona ಠ_ಠ
Posté le 03-02-2004 à 21:02:36  profilanswer
 

pis attention ->  
 
count (resultat.nojoueur) as TotalPre,  
ET GROUP BY resultat.NoJoueur

n°630217
MauditOsti​e
Posté le 03-02-2004 à 21:04:14  profilanswer
 

On ma toujours dit que SQL Server 2000 etait pas casesensitive...
l'est-il? Ou bien est-ce simplement a cause que c'est une fonction d'aggregation?


---------------
MauditOstie... Progress Rules
n°630221
jagstang
Pa Capona ಠ_ಠ
Posté le 03-02-2004 à 21:05:35  profilanswer
 

donne ta requête complète stp. (non il est pas case-sensitive, mais c'est pas une raiso :o)

n°630224
MauditOsti​e
Posté le 03-02-2004 à 21:07:01  profilanswer
 

Bien je l'ai donne dans le premier message. C'est ma requete complete! C'est ca que j'ai besoin....


---------------
MauditOstie... Progress Rules
n°630229
MauditOsti​e
Posté le 03-02-2004 à 21:08:18  profilanswer
 

Ca se trouve a etre un fichier .ASP pour un petit site web que je fais.


---------------
MauditOstie... Progress Rules
n°630238
MauditOsti​e
Posté le 03-02-2004 à 21:12:18  profilanswer
 

Voila le coin de mon code complet:  
 if request.querystring("Query" ) <> "" then
       dim objConn, objComm, objRS
       dim vNoJoueur, vNoEquipe
 
          vNoJoueur = request.Cookies("NoJoueur" )
    vNoEquipe = request.cookies("NoEquipe" )
   
          set objConn = server.CreateObject("ADODB.connection" )    
       set objComm = Server.CreateObject("ADODB.Command" )
       
          objConn.Open "driver=SQL server;" & _
                       "server=sergeserver;" & _  
                    "uid=BASMUser;pwd=BASMUser;database=BASMSql"      
         
       objComm.ActiveConnection = objConn
          objComm.CommandType = adCmdText
     
          objComm.CommandText = _  
        "SELECT top 10" & _
     "  resultat.NoJoueur, " & _
     "  resultat.hit, " & _
     "  count (resultat.noJoueur) 'TotalPre' , " & _
     "  joueurs.prenom, " & _
     "  joueurs.nom, " & _
     "  EquipeMstr.NomEquipe " & _
     "FROM resultat, joueurs, EquipeDetl, EquipeMstr " & _
     "WHERE (resultat.NoJoueur = joueurs.NoJoueur) and " & _
     "      (EquipeDetl.NoJoueur = Resultat.NoJoueur and " & _
     "       EquipeDetl.Annee = " & session.Contents("Annee" ) & " ) and " & _
     "      (EquipeMstr.NoEquipe = EquipeDetl.NoEquipe) " & _
     "GROUP BY resultat.noJoueur"  
     
     
     
                                 
       set objRS = objComm.execute  
   
        response.write "<div align='center'><font align='center' color='#FFFFFF' size='+1'><br>"
    while not objRS.EOF  
       response.write objRS("NoJoueur" )  & " " & _
                      objRS("Nom" )       & " " & _
                      objRS("Prenom" )    & " " & _  
                      objRS("Hit" )       & " " & _  
                      objRS("TotalPre" )  & " " & _  
                      objRS("NomEquipe" ) & "<BR>"
                       
    objRS.MoveNext
    wend  
     
    set objRS = nothing
    set objComm = nothing
    set objConn = nothing
          response.write "</font></div>"
  end if  


---------------
MauditOstie... Progress Rules
mood
Publicité
Posté le 03-02-2004 à 21:12:18  profilanswer
 

n°630289
bill.fr
Posté le 03-02-2004 à 21:48:21  profilanswer
 

SELECT top 10 resultat.NoJoueur,  
       resultat.hit,  
       count (resultat.nojoueur) as TotalPre,  
       joueurs.prenom,  
       joueurs.nom,  
       EquipeMstr.NomEquipe  
      FROM resultat, joueurs, EquipeDetl, EquipeMstr  
      WHERE (resultat.NoJoueur = joueurs.NoJoueur) and  
            (EquipeDetl.NoJoueur = Resultat.NoJoueur and  
        EquipeDetl.Annee = " & session.Contents("Annee" ) & " ) and  
           (EquipeMstr.NoEquipe = EquipeDetl.NoEquipe)  
     GROUP BY resultat.hit, joueurs.prenom, joueurs.nom, EquipeMstr.NomEquipe
 
le champ en count est le seul qui soit dispensé d'être dans le group by...
 
(je dis ça de tête, j'ai pas de base sous la main pour tester)  


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
n°631299
MagicBuzz
Posté le 04-02-2004 à 17:10:34  profilanswer
 

JagStang a écrit :

un fonction d'aggreagation regroupe plusieurs valeurs, c'est pour ça que pour chaque fonction d'aggrétation utilisée, il faut un group by correspondant.  
 
COUNT(machin)  --> GROUP BY(machin)


C'est le contraire. Dans le GROUP BY, y'a tout SAUF les champs participant aux fonctions d'agrégation.
 
Et le SQL n'est pas case sensitive. Si un SGBD l'est, alors c'est GOTO POUBELLE et n'en ressort pas.
 
PS: par contre, c'est case sensitive pour les valeurs.
 
select toto from machin order by TotO <= fonctionne
 
select toto from machin where toto like 'A%' c'est pas pareil que select toto from machin where toto like 'a%'
 
Pour ce second point, c'est généralement paramètrable au niveau de la base elle-même, car on a rarement besoin de faire la différence entre maj et min dans les champs texte.


Message édité par MagicBuzz le 04-02-2004 à 17:12:37
n°631312
bill.fr
Posté le 04-02-2004 à 17:21:46  profilanswer
 

MagicBuzz a écrit :


C'est le contraire. Dans le GROUP BY, y'a tout SAUF les champs participant aux fonctions d'agrégation.


 
+1
 
le champ en count est le seul qui soit dispensé d'être dans le group by... C'est ce que ça disait


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete SQL qui ne fonctionne pas

 

Sujets relatifs
Mauvaise requete MySQL[PHP] comment tester si une requête ne donne pas de résultat
Include qui ne fonctionne pas ?besoin d'infos pour requete SQL particuliere !
[résolu] aide sur une requete sql toute conneRequête sous SQL qui modifie une valeur
Purge Log Sql Serveur ???Comment copier un fichier > 32 Ko ds une BD SQL ???
Plus de sujets relatifs à : Requete SQL qui ne fonctionne pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR