webForumDet fria alternativet

Använda where på variabeln AntMatcher?

Databaser & SQL

13 svar · 238 visningar · startad av Ralle

Medlem sedan feb. 2003210 inlägg
Frågan#1
SELECT Nr, Fornamn, Efternamn, Position, AntMatcher 
FROM (SELECT Nr, Fornamn, Efternamn, Position, Sum(Select Count(Match) FROM Matcher
WHERE (Sasong1='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare=SSK_trupp.Id)) AS AntMatcherFROM SSK_trupp WHERE Sasong='" & Sasong3 & "')
ORDER BY AntMatcher DESC"

Jag skulle vilja kunna välja ut dom spelare som spelat t.ex. 1 match.

Har provat med where på alla upptänkliga sätt, utan att lyckas. Problemet är att AntMatcher inte är en kolumn i tabellen, och det verkar den inte kunna hantera.

SQL'en är mycket större, men av hänsyn till läsbarhet, så har jag skalat bort det mesta.

Hoppas på hjälp från någon vänlig här?

Medlem sedan dec. 200012 464 inlägg
#2
select Nr, Fornamn, Efternamn, Position,AntMatcher from
(SELECT Nr, Fornamn, Efternamn, Position, (Select Count(Match) FROM Matcher
WHERE (Sasong1='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare=SSK_trupp.Id)) AS AntMatcher
FROM SSK_trupp 
WHERE Sasong='" & Sasong3 & "')
and antMatcher = 1
ORDER BY AntMatcher DESC"

Varför hade du sum med?

Medlem sedan feb. 2003210 inlägg
#3

LarsG skrev:

select Nr, Fornamn, Efternamn, Position,AntMatcher from
(SELECT Nr, Fornamn, Efternamn, Position, (Select Count(Match) FROM Matcher
WHERE (Sasong1='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare=SSK_trupp.Id)) AS AntMatcher
FROM SSK_trupp 
WHERE Sasong='" & Sasong3 & "')
and antMatcher = 1
ORDER BY AntMatcher DESC"

Varför hade du sum med?

Jag fick hjälp av någon med det.

Ditt förslag fungerar inte, jag får syntax-fel i from-instruktionen.

Medlem sedan dec. 200012 464 inlägg
#4

Hur ser din fråga ut efter det att alla substitutioner är gjorda?

Vilken databashanterare använder du?

Medlem sedan feb. 2003210 inlägg
#5

LarsG skrev:

Hur ser din fråga ut efter det att alla substitutioner är gjorda?

Vilken databashanterare använder du?

Jag vet inte vad du menar med substitutioner, om du inte menar hela frågan?

Jag använder Access.

Medlem sedan dec. 200012 464 inlägg
#6

Det jag vill är att se frågan så som den ser ut när den skickas till Access.

Så om du gör

sql = "select ... "
response.write "SQL:" & sql
response.end

så vill jag se den rad där du konstruerar frågan och resultatet av response.write

Medlem sedan feb. 2003210 inlägg
#7

LarsG skrev:

Det jag vill är att se frågan så som den ser ut när den skickas till Access.

Så om du gör

sql = "select ... "
response.write "SQL:" & sql
response.end

så vill jag se den rad där du konstruerar frågan och resultatet av response.write

Om jag verkar lite frågande så beror det på att hela frågan är ungefär 1000 tecken lång. men det är klart att jag kan lägga in den, om du vill.

Om jag testkör den på sidan så får jag felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Frågan är för komplex.

Jag har hittills testat den i Access, då tilldelas alla spelarna en etta, oavsett om dom spelat eller inte.

Medlem sedan dec. 200012 464 inlägg
#8

Jo, det är lika bra att ta allt. Det vore även bra med en beskrivning av de tabeller som du använder.

Medlem sedan feb. 2003210 inlägg
#9

LarsG skrev:

Jo, det är lika bra att ta allt. Det vore även bra med en beskrivning av de tabeller som du använder.

strSQL3="SELECT Nr, Fornamn, Efternamn, Position, AntMatcher, Mal, Assist, Poang, Utvisning, Utlånad
 FROM (SELECT Nr, Fornamn, Efternamn, Position, Utlånad, (Select Count(Match) FROM Matcher
 WHERE (Sasong1='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare=SSK_trupp.Id)) AS AntMatcher, 
(Select Sum(Mål) FROM Skytteliga_Elitserien WHERE (Sasong2='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare1=SSK_trupp.Id)) AS Mal, 
(Select Sum(Assist1+Assist2) FROM Skytteliga_Elitserien WHERE (Sasong2='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare1=SSK_trupp.Id)) AS Assist, 
(Select Sum(Mål+Assist1+Assist2) FROM Skytteliga_Elitserien WHERE (Sasong2='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare1=SSK_trupp.Id)) AS Poang, 
(Select Sum(Utvisningstid) FROM Utvisning_Elitserien WHERE (Sasong2='" & Sasong3 & "' AND Match=" & Matchnr1 & " AND Spelare1=SSK_trupp.Id)) AS Utvisning 
FROM SSK_trupp WHERE Sasong='" & Sasong3 & "') [B]WHERE AntMatcher = 1[/B] ORDER BY AntMatcher DESC, Mal+Assist DESC, Mal DESC, Assist DESC"

Det fetstilta är det jag försökt testa.

Tabell:
SSK_trupp:Id, Nr, Fornamn, Efternamn, Position, Utlånad, Sasong.

Matcher:Id, Match, Spelare, Sasong1.
Fältet Match innehåller matchnummer från tabell Elitserien.

Skytteliga_Elitserien:Id, Sasong2, Match, Spelare, Period, Tid, Mål, Assist1, Assist2.

Utvisning_Elitserien:Id, Match, Sasong2, Spelare, Period, Tid, Utvisning, Utvisningstid.

Så nu tror jag att jag fått med allt.

Medlem sedan dec. 200012 464 inlägg
#10

Om du får felet query to complex så är du nog illa ute.

Du kan ju testa

SELECT Nr, Fornamn, Efternamn, Position, Utlånad, 
 (Select Count(Match) FROM Matcher
  WHERE (Sasong1='" & Sasong3 & "' 
    AND Match=" & Matchnr1 & " 
    AND Spelare=SSK_trupp.Id)) AS AntMatcher, 
 (Select Sum(Mål) FROM Skytteliga_Elitserien 
  WHERE (Sasong2='" & Sasong3 & "' 
    AND Match=" & Matchnr1 & " 
    AND Spelare1=SSK_trupp.Id)) AS Mal, 
 (Select Sum(Assist1+Assist2) 
    FROM Skytteliga_Elitserien 
   WHERE (Sasong2='" & Sasong3 & "' 
    AND Match=" & Matchnr1 & " 
    AND Spelare1=SSK_trupp.Id)) AS Assist, 
 (Select Sum(Mål+Assist1+Assist2) 
   FROM Skytteliga_Elitserien 
  WHERE (Sasong2='" & Sasong3 & "' 
    AND Match=" & Matchnr1 & " 
    AND Spelare1=SSK_trupp.Id)) AS Poang, 
 (Select Sum(Utvisningstid) 
    FROM Utvisning_Elitserien 
   WHERE (Sasong2='" & Sasong3 & "' 
     AND Match=" & Matchnr1 & " 
     AND Spelare1=SSK_trupp.Id)) AS Utvisning 
  FROM SSK_trupp 
 WHERE Sasong='" & Sasong3 & "') 
  and 1 = (Select Count(Match) FROM Matcher
  WHERE (Sasong1='" & Sasong3 & "' 
    AND Match=" & Matchnr1 & " 
    AND Spelare=SSK_trupp.Id))
ORDER BY AntMatcher DESC, Mal+Assist DESC, Mal DESC, Assist DESC"
Medlem sedan feb. 2003210 inlägg
#11

Det här felmeddelandet får jag nu:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i FROM-instruktion.

Medlem sedan dec. 20003 887 inlägg
#12

Kan det vara providern i det här fallet, som inte klarar av det av någon konstig anledning?

Frågan i sig är ju inte speciellt knivig - sex stycken subqueries. Felmeddelandet tyder på att du använder dig av ASP. Byt till OleDB-provider:

strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(strPath2DB)

Annars kanske du kan få ett tydligare felmeddelande om du klistrar in frågan direkt i Access.

Medlem sedan feb. 2003210 inlägg
#13

Det fungerar i Access.

Så här koden ut till databasen:

Set objConnect = Server.CreateObject("ADODB.Connection")
objConnect.ConnectionString="driver={Microsoft Access Driver (*.mdb)};" &"dbq=" &Server.MapPath("../databas/Ishockey.mdb")
objConnect.Open

Så här ser den ut till själva frågan:

Set Poangliga=objConnect.Execute(strSQL3)
Medlem sedan feb. 2003210 inlägg
#14

Engine^ skrev:

Kan det vara providern i det här fallet, som inte klarar av det av någon konstig anledning?

Frågan i sig är ju inte speciellt knivig - sex stycken subqueries. Felmeddelandet tyder på att du använder dig av ASP. Byt till OleDB-provider:

strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(strPath2DB)

Annars kanske du kan få ett tydligare felmeddelande om du klistrar in frågan direkt i Access.

Jag hittade felet. Det var en höger ")" för litet.

264 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)