Requete SQL qui ne fonctionne pas - SQL/NoSQL - Programmation
Marsh Posté le 03-02-2004 à 20:56:07
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)
Marsh Posté le 03-02-2004 à 20:59:28
Ouiais je sais, c'est pourquoi j'ai mon
Citation : count (resultat.nojoueur) as TotalPre, |
Toutefois MSSQL semble ne pas aimer ma string!
Marsh Posté le 03-02-2004 à 21:02:36
pis attention ->
count (resultat.nojoueur) as TotalPre,
ET GROUP BY resultat.NoJoueur
Marsh Posté le 03-02-2004 à 21:04:14
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?
Marsh Posté le 03-02-2004 à 21:05:35
donne ta requête complète stp. (non il est pas case-sensitive, mais c'est pas une raiso )
Marsh Posté le 03-02-2004 à 21:07:01
Bien je l'ai donne dans le premier message. C'est ma requete complete! C'est ca que j'ai besoin....
Marsh Posté le 03-02-2004 à 21:08:18
Ca se trouve a etre un fichier .ASP pour un petit site web que je fais.
Marsh Posté le 03-02-2004 à 21:12:18
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
Marsh Posté le 03-02-2004 à 21:48:21
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)
Marsh Posté le 04-02-2004 à 17:10:34
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. |
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.
Marsh Posté le 04-02-2004 à 17:21:46
MagicBuzz a écrit : |
+1
le champ en count est le seul qui soit dispensé d'être dans le group by... C'est ce que ça disait
Marsh Posté le 03-02-2004 à 20:29:08
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
---------------
MauditOstie... Progress Rules