aspMedlem sedan aug. 2002733 inlägg Hej!
Med denna kod får jag felmeddelandet:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i FROM-instruktion.
Här kommer koden..
strSQL = "SELECT bmal, hmal, " &_
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal) AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal) AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal) AS oavgjorda " & _
"FROM tblSpel" &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY lagid"
Set objRSH = Conn.Execute(strSQL)
@ndersMedlem sedan juni 200032 969 inlägg Mellanslag mellan tabellnamn och WHERE.
Skriv ut SQL-frågan när du får fel, det är mycket lättare att fånga felen själv då.
aspMedlem sedan aug. 2002733 inlägg Hur skriver man ut den då?
aspMedlem sedan aug. 2002733 inlägg Nu fick jag plötsligt felmesset:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'bmal'.
@ndersMedlem sedan juni 200032 969 inlägg
Hur skriver man ut den då?
Man kan använda Response.write exempelvis.
Du måste också ha med alla fält du selectar i GROUP BY-instruktionen.
aspMedlem sedan aug. 2002733 inlägg Ser inte att det är för få..
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
aasahMedlem sedan mars 20034 471 inlägg Du har
SELECT hmal, bmal FROM..... GROUP BY lagid
Den kolumn du har i GROUP BY måste finnas med i SELECT-satsen, alltså:
SELECT hmal, bmal, lagid FROM..... GROUP BY lagid
Anledningen är att du ju får ut olika värden för de olika lagen och om lagid inte skrivs ut då så kan inte resultatet skrivas ut på ett vettigt sätt. Och ja, felmeddelandet låter som om felet var "på andra hållet".... men det är det inte.
aspMedlem sedan aug. 2002733 inlägg Varför fungerar inte denna kod då?
strSQL = "SELECT bmal, hmal, " &_
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal) AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal) AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal) AS oavgjorda " & _
"FROM tblSpel " &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY hmal"
Set objRSH = Conn.Execute(strSQL)
solbulleMedlem sedan mars 20015 287 inlägg För att den är lika som den första du postade?
Jag antar att du skämtar...
@nders skrev:
Du måste också ha med alla fält du selectar i GROUP BY-instruktionen.
aspMedlem sedan aug. 2002733 inlägg Men varför fungerar inte denna då?
strSQL = "SELECT bmal, hmal, " &_
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal) AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal) AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal) AS oavgjorda " & _
"FROM tblSpel " &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY hmal, bmal"
Set objRSH = Conn.Execute(strSQL)
Engine^Medlem sedan dec. 20003 887 inlägg Jag ser inte vad som kan vara fel med det där. Vad är det som blir fel?
aasahMedlem sedan mars 20034 471 inlägg Den borde rimligen inte göra det du vill.
Group by partitionerar data efter de attribut som listas. Jag kan förstå att du vill gruppera på lagid, men knappast på hmal och bmal.
Exempel
Tabell
Lagid hmal bmal
AIK 3 9
DIF 3 6
HIF 3 6
Select * from Tabell group by bmal
bmal = 6
Lagid hmal
DIF 3
HIF 3
bmal = 9
Lagid hmal
AIK 3
Inte är du intresserad av att bunta samman lag som råkar ha lika många hmal och bmal, heller? Du vill väl bunta ihop de rader som har samma lagid?
Det brukar fungera att skriva fler kolumner i selectsatsen än i group by. Så testa mitt förslag ovan.
aspMedlem sedan aug. 2002733 inlägg Det jag vill att är att få tabellen att se ut såhär:
Lagid hmal - bmal
Lagid hmal - bmal
Lagid hmal - bmal
Lagid hmal - bmal
Så när man tittar så står det tex:
GAIS 23-2
IFK 22-22
ÖIS 2-23
aspMedlem sedan aug. 2002733 inlägg Kommer denna kod göra det som jag vill?
strSQL = "SELECT ALL " &_
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal) AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal) AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal) AS oavgjorda, " & _
"(SELECT Sum(hmal) FROM tblSpel) AS gjorda, " & _
"(SELECT Sum(bmal) FROM tblSpel) AS inslappta " & _
"FROM tblSpel " &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY lagid " &_
"ORDER BY lagid DESC"
Set objRSH = Conn.Execute(strSQL)
Jag får felmeddelandet:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
@ndersMedlem sedan juni 200032 969 inlägg Finns det verkligen i Jet SQL? Varför inte använda *? Dessutom, ska du selecta mer än just det, då saknar du ett kommatecken.
aspMedlem sedan aug. 2002733 inlägg menar du att första raden skall se ut såhär?
strSQL = "SELECT *, " &_
aspMedlem sedan aug. 2002733 inlägg Denna kod fungerar:
strSQL = "SELECT lagid, bmal, hmal " &_
"(SELECT COUNT(*) FROM tblSpel WHERE ligaid = " & intID & " AND hmal IS NOT null) AS matcher, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal AND ligaid = " & intID & ") AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal AND ligaid = " & intID & ") AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal AND ligaid = " & intID & ") AS oavgjorda, " & _
"(SELECT Sum(hmal) FROM tblSpel WHERE ligaid = " & intID & ") AS gjorda, " & _
"(SELECT Sum(bmal) FROM tblSpel WHERE ligaid = " & intID & ") AS inslappta " & _
"FROM tblSpel " &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY bmal, hmal " &_
"ORDER BY bmal, hmal DESC"
Set objRSH = Conn.Execute(strSQL)
Men varför fungerar inte denna?
strSQL = "SELECT lagid, hlag, blag, hmal, bmal, " &_
"(SELECT COUNT(*) FROM tblSpel WHERE ligaid = " & intID & " AND hmal IS NOT null) AS matcher, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal > bmal AND ligaid = " & intID & ") AS vinster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal < bmal AND ligaid = " & intID & ") AS forluster, " & _
"(SELECT COUNT(*) FROM tblSpel WHERE hmal = bmal AND ligaid = " & intID & ") AS oavgjorda, " & _
"(SELECT Sum(hmal) FROM tblSpel WHERE ligaid = " & intID & ") AS gjorda, " & _
"(SELECT Sum(bmal) FROM tblSpel WHERE ligaid = " & intID & ") AS inslappta " & _
"FROM tblSpel " &_
"WHERE ligaid = " & intID & " " &_
"GROUP BY lagid, hlag, blag, hmal, bmal " &_
"ORDER BY lagid DESC"
Set objRSH = Conn.Execute(strSQL)
Saken är den att jag vill göra så att man räknar ut statistik för varje lag.