Hej, Ska du inte sortera på SumRanking? Har nu undersökt saken lite närmare och tror att detta är hur du ska göra... Hej och tack för ditt svar. Jag har prövat ditt förslag men fick följande felmeddelande: Hmm, testa detta. Hej igen, Ok, har ingen egentlig aning om vad som kan vara fel, men jag testade en annan angreppspunkt på frågan... Hej igen och tack för dina tappra försök :) Fick följande resultat: Ok, nu har jag testat i en temporär access databas jag gjorde och tror att denna ska fungera. Jag skulle skrivt så här: Superstort tack! Det fungerar perfekt. Jag har precis utsett dig till världens smartaste :) Antar att det var min SQL sats du syftar på eftersom du svarade åt mig :)SQL-problem
I tabellen tableTournament har jag fälten intTourID, intPlayerID, intRanking. Spelare (intPlayerID) som deltagit i en turnering (intTourID) får efter turneringens slut en poäng (intRanking) baserat på hur det gått.
Vad jag vill göra är att plocka fram de två spelarna som är anmälda till turneringen nummer 48 och som har högst summerad intRanking för samtliga spelade turneringar. Vad det handlar om är att seeda de två bästa spelarna för en turnering.
Så här långt har jag kommit:
SQLseed = "SELECT TOP 2 u.intPlayerID, SUM(r.intRanking) As SumRanking " & _
"FROM tableTournament u INNER JOIN tableTournament r ON r.intPlayerID = u.intPlayerID GROUP BY u.intPlayerID, r.intRanking, u.intTourID " & _
"HAVING u.intTourID = " & intTourID & " ORDER BY r.intRanking DESC"
Problemet är att denna SQL-sats resulterar i att nummer två och tre på rankinglistan plockas fram.
Hur ska SQL-satsen se ut för att det blir som jag vill ha det??Sv: SQL-problem
SQLseed = "SELECT TOP 2 u.intPlayerID, SUM(r.intRanking) As SumRanking " & _
"FROM tableTournament u INNER JOIN tableTournament r ON r.intPlayerID = u.intPlayerID GROUP BY u.intPlayerID, r.intRanking, u.intTourID " & _
"HAVING u.intTourID = " & intTourID & " ORDER BY SumRanking DESC"
Sv: SQL-problem
SELECT TOP 2 tableTournament.intPlayerID FROM tableTournament
INNER JOIN
(
SELECT intPlayerID, SUM(r.intRanking) AS totrank
FROM tableTournament
GROUP BY intPlayerID
) AS ranking ON ranking.intPlayerID = tableTournament.intPlayerID
GROUP BY tableTournament.intPlayerID
WHERE tableTournament.intTourID = [VALUE]
ORDER BY ranking.totrank DESC
Byt ut "[VALUE]" mot turnerings id så ska det nog bara vara att köra...
Bättre kan jag inte komma på just nu.
Sv:SQL-problem
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'tableTournament.intPlayerID WHERE tableTournament.intTourID = 48'.
/create_test.asp, line 45
Jag har själv svårt att se hur man ska lösa det. Några förslag?Sv: SQL-problem
SELECT TOP 2 tableTournament.intPlayerID FROM tableTournament
INNER JOIN
(
SELECT intPlayerID, SUM(r.intRanking) AS totrank
FROM tableTournament
GROUP BY intPlayerID
) AS ranking ON ranking.intPlayerID = tableTournament.intPlayerID
WHERE tableTournament.intTourID = [VALUE]
GROUP BY tableTournament.intPlayerID
ORDER BY ranking.totrank DESC
Slängde om WHERE och GROUP BY delarna.
Sv:SQL-problem
jag prövade din nya SQL-sats och fick följande felmeddelande:
Microsoft JET Database Engine error '80040e21'
You tried to execute a query that does not include the specified expression 'ranking.totrank' as part of an aggregate function.
/creatematch_test.asp, line 48 Sv: SQL-problem
Testa om den fungerar nu.
SELECT TOP 2 ranking.intPlayerID FROM
(
SELECT intPlayerID, SUM(intRanking) AS totrank
FROM tableTournament
GROUP BY intPlayerID
) AS ranking
INNER JOIN tableTournament ON tableTournament.intPlayerID = ranking.intPlayerID
WHERE tableTournament.intTourID = [VALUE]
GROUP BY ranking.intPlayerID
ORDER BY ranking.totrank DESC
Sv:SQL-problem
SELECT TOP 2 ranking.intPlayerID FROM (SELECT intPlayerID, SUM(r.intRanking) AS totrank FROM tableTournament GROUP BY intPlayerID) AS ranking INNER JOIN tableTournament ON tableTournament.intPlayerID = ranking.intPlayerID WHERE tableTournament.intTourID = 48 GROUP BY ranking.intPlayerID ORDER BY ranking.totrank DESC
Microsoft JET Database Engine error '80040e21'
You tried to execute a query that does not include the specified expression 'ranking.totrank' as part of an aggregate function.
/creatematch_test.asp, line 49
Surt sa räven. Märkligt att det inte vill fungera!Sv: SQL-problem
Skulle säkert gå att göra på något annat sätt också men detta verkar i alla fall fungera, för mig i alla fall.
Du får kontrollera om den hämtar ut rätt rader.
<code>
SELECT TOP 2 * FROM
(
SELECT intPlayerID FROM
(
SELECT intPlayerID,
(
SELECT SUM(b.intRanking)
FROM tableTournament b
WHERE b.intPlayerID = a.intPlayerID
) AS totalrank
FROM tableTournament a
WHERE intTourID = [VALUE]
GROUP BY intPlayerID
)
ORDER BY totalrank DESC
)
</code>Sv: SQL-problem
SQLseed = "SELECT TOP 2 intPlayerID, SUM(intRanking) As SumRanking" & vbCrLf & _
"FROM tableTournament" & vbCrLf & _
"WHERE intPlayerID IN (SELECT intPlayerID" & vbCrLf & _
" FROM tableTournament" & vbCrLf & _
" WHERE intTourID = " & intTourID & ")" & vbCrLf & _
"GROUP BY intPlayerID" & vbCrLf & _
"ORDER BY SUM(intRanking) DESC, intPlayerID"
Eller:
SQLseed = "SELECT TOP 2 Main.intPlayerID, Sub.SumRanking" & vbCrLf & _
"FROM tableTournament AS Main INNER JOIN (SELECT intPlayerID, SUM(intRanking) As SumRanking" & vbCrLf & _
" FROM tableTournament" & vbCrLf & _
" GROUP BY intPlayerID) AS Sub ON Main.intPlayerID = Sub.intPlayerID" & vbCrLf & _
"WHERE Main.intTourID = " & intTourID & vbCrLf & _
"ORDER BY Sub.SumRanking DESC, Main.intPlayerID"
Sv:SQL-problem
Sv: SQL-problem
Varsågod, det blev en liten "fullösning" men det verkade som att Access inte riktigt ville med de andra...
Tack för utmärkelsen ;)