Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


SQL-problem

Postades av 2005-10-31 14:41:58 - fredrik nilsson, i forum access, Tråden har 13 Kommentarer och lästs av 766 personer

Hej,

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??


Svara

Sv: SQL-problem

Postades av 2005-10-31 15:19:49 - Thomas Vanhaniemi

Ska du inte sortera på SumRanking?

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"


Svara

Sv: SQL-problem

Postades av 2005-10-31 15:41:02 - Thomas Vanhaniemi

Har nu undersökt saken lite närmare och tror att detta är hur du ska göra...

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.


Svara

Sv:SQL-problem

Postades av 2005-10-31 16:08:32 - fredrik nilsson

Hej och tack för ditt svar. Jag har prövat ditt förslag men fick följande felmeddelande:

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?


Svara

Sv: SQL-problem

Postades av 2005-10-31 16:44:01 - Thomas Vanhaniemi

Hmm, testa detta.

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.


Svara

Sv:SQL-problem

Postades av 2005-10-31 17:07:28 - fredrik nilsson

Hej igen,

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


Svara

Sv: SQL-problem

Postades av 2005-10-31 17:34:47 - Thomas Vanhaniemi

Ok, har ingen egentlig aning om vad som kan vara fel, men jag testade en annan angreppspunkt på frågan...
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


Svara

Sv:SQL-problem

Postades av 2005-10-31 17:51:02 - fredrik nilsson

Hej igen och tack för dina tappra försök :) Fick följande resultat:

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!


Svara

Sv: SQL-problem

Postades av 2005-10-31 18:45:03 - Thomas Vanhaniemi

Ok, nu har jag testat i en temporär access databas jag gjorde och tror att denna ska fungera.
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>


Svara

Sv: SQL-problem

Postades av 2005-10-31 19:25:11 - Andreas Hillqvist

Jag skulle skrivt så här:

    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" 


Svara

Sv:SQL-problem

Postades av 2005-10-31 22:44:45 - fredrik nilsson

Superstort tack! Det fungerar perfekt. Jag har precis utsett dig till världens smartaste :)


Svara

Sv: SQL-problem

Postades av 2005-11-01 06:00:29 - Thomas Vanhaniemi

Antar att det var min SQL sats du syftar på eftersom du svarade åt mig :)
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 ;)


Svara

Sv:SQL-problem

Postades av 2005-11-02 10:43:15 - fredrik nilsson

Ja, det var dig jag menade, Thomas :)


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 770
27 960
271 761
775
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies