Hej, Till att börja med kan du ju visa hur själva SQL-strängen ser ut, snarare än hur du bygger upp den. Hej, Det du har skrivit där är någon sorts VB/VBA/VB.NET-kod, eller hur? Tack för snabb respons. Nu ser det bättre ut. Efter snabb genomläsning verkar det rätt. Börja med att plocka isär kodbitarna och se vad du får. Lite svårt att plocka ut det, jag var tvungen att ersätta PlayerID med ID:t på den spelare som det berör. Då gav det följande resultat. Ja, det är inte omöjligt. Det är alltid svårt att sätta sig in i någon annans kod, i synnerhet när man inte har rådatan. Tack för ditt engagemang. Det är alltid krångligt att sätta sig in i någon annans kod.SQL-sats
i en SQL-sats ska jag plocka fram den spelare som avancerat mest i ranking från vecka 1 till vecka 2. Jag har följande sats:
Kod:
SQLRank = " SELECT TOP 1 * From (Select tableRanking.strDate, tableRanking.intRanking, tablePlayerdetails.strPfirstname + ' ' + tablePlayerdetails.strPsurname AS Player, tableplayerdetails.PlayerID, tableRanking.intRankposition, " & _
" (SELECT intRankposition FROM tableRanking T2 WHERE T2.PlayerID = tablePlayerdetails.PlayerID AND intWeek = " & intWeek - 1 & " AND intYear = " & intYear & ") - tableRanking.intRankposition AS RankMove " & _
" FROM tableRanking, tablePlayerdetails" & _
" WHERE tableRanking.PlayerID = tablePlayerdetails.PlayerID" & _
" AND intWeek = " & intWeek & " AND intYear = " & intYear & ") AS Rank ORDER BY RankMove DESC"
Problemet med denna är att den ger "fel" svar i RankMove. Den ger rätt spelare, men fel antal rankingsteg. Spelaren avancerade från 18 till 12 men ger 20 i RankMove när det borde vara 6. Något skumt är det...kan någon hjälpa mig med en lösning?Sv: SQL-sats
Sv:SQL-sats
jag förstår inte riktigt hur du menar. Menar du hur tabellerna ser ut eller hur jag fyller SQL-satsen med relevant data? SQL-strängen ovan är den jag använder...Sv: SQL-sats
Kör koden, fånga upp sql-meddelandet, och skriv det här.Sv:SQL-sats
Jag har skrivit den i ett asp-dokument i notepad. Jag får inget felmeddelande, utan den genererar "fel" värde. Det ska vara 6 och inte 20.
Så här blir det om jag kör ett response.write på den:
SELECT TOP 1 * From (Select tablePlayerDetails.intPlayerAge, tablePlayerDetails.strResidence, tablePlayerDetails.strCountry, tableRanking.strDate, tableRanking.intRanking, tablePlayerdetails.strPfirstname + ' ' + tablePlayerdetails.strPsurname AS Player, tableplayerdetails.PlayerID, tableRanking.intRankposition, (SELECT intRankposition FROM tableRanking T2 WHERE T2.PlayerID = tablePlayerdetails.PlayerID AND intWeek = 13 AND intYear = 1) - tableRanking.intRankposition AS RankMove FROM tableRanking, tablePlayerdetails WHERE tableRanking.PlayerID = tablePlayerdetails.PlayerID AND intWeek = 14 AND intYear = 1) AS Rank ORDER BY RankMove DESCSv: SQL-sats
Vad ger följande:
(SELECT intRankposition FROM tableRanking T2, tablePlayerdetails WHERE T2.PlayerID = tablePlayerdetails.PlayerID AND intWeek = 13 AND intYear = 1)
Och
Select tableRanking.intRankposition FROM tableRanking, tablePlayerdetails WHERE tableRanking.PlayerID = tablePlayerdetails.PlayerID AND intWeek = 14 AND intYear = 1Sv:SQL-sats
Den första SQL-satsen (vecka 13) ger svaret 18.
Den andra SQL-satsen (vecka 14) ger svaret 12.
En liten ledtråd kan vara att det totala antalet spelare på rankinglistan är 32. 32-12 = 20, dvs det tal som presenteras vid en response.write av RankMove...*signaturmelodi till Hajen 1,2 och 3*.
Det kan ju tyda på att det första värdet (för vecka 13) är felaktigt?Sv: SQL-sats
Du måste bena ut varje del för sig - får det här rätt värde, får nästa rätt värde osv.
Frågan är för komplex att bara läsa igenom och förstå.Sv:SQL-sats
Jag gjort ännu en ful-lösning. Jag plockade ut ID:t från SQL-satsen och använde den i en ny SQL-sats så blev det rätt. Men det kostade ytterligare ett dyrbart recordset.
Så här blev det:
Player of the week award
Week 14, Year 1
Herman Lundberg, 19, from Sweden, currently living in Stockholm. He has moved 6 positions since last week and is now ranked as number 12 in the world.
The Player of the week award is an award for the player that has advanced most positions in the last week.
:)