Jag har en sqlfråga för att skapa tabeller för ishockeyserier
Sql-frågan har jag hittat i forumet på pellesoft
tabellerna ser ut så här
Tabell: tblLag
Fält: LagID
Fält: LagNamn
Tabell: tblMatcher
Fält: MatchID
Fält: MatchLag1
Fält: MatchMål1
Fält: MatchLag2
Fält: MatchMål2
Frågan
SELECT [tblLag].[LagID], [tblLag].[LagNamn],
Count([tblMatcher].[MatchId]) AS Antal,
-Sum(([tblLag].[LagID]=[tblMatcher].[MatchLag1]
And [tblMatcher].[MatchMål1]>[tblMatcher].[MatchMål2])
Or ([tblLag].[LagID]=[tblMatcher].[MatchLag2]
And [tblMatcher].[MatchMål1]<[tblMatcher].[MatchMål2])) AS Vinster,
-Sum([tblMatcher].[MatchMål1]=[tblMatcher].[MatchMål2]) AS Oavgjort,
-Sum(([tblLag].[LagID]=[tblMatcher].[MatchLag1]
And [tblMatcher].[MatchMål1]<[tblMatcher].[MatchMål2])
Or ([tblLag].[LagID]=[tblMatcher].[MatchLag2]
And [tblMatcher].[MatchMål1]>[tblMatcher].[MatchMål2])) AS Förluster,
((vinster*2)+oavgjort) AS poang
FROM tblLag LEFT JOIN tblMatcher ON ([tblLag].[LagID]=[tblMatcher].[MatchLag1])
Or ([tblLag].[LagID]=[tblMatcher].[MatchLag2])
GROUP BY [tblLag].[LagID], [tblLag].[LagNamn]
ORDER BY 7 DESC;
Någon som vet hur jag ska göra för att räkna ut antalet plus och minusmål och målskillnad?
LarsGMedlem sedan dec. 200012 464 inlägg Jag rensade lite guck
SELECT LagID,
LagNamn,
Count(MatchId) AS Antal,
-Sum((LagID=MatchLag1 And MatchMål1 > MatchMål2 )
Or (LagID=MatchLag2 And MatchMål1<MatchMål2)) AS Vinster,
-Sum(MatchMål1=MatchMål2) AS Oavgjort,
antal - Vinster - Oavgjort as Förluster ,
vinster*2 + oavgjort AS poang,
-Sum((LagID=MatchLag1)*MatchMål1 + (LagID=MatchLag2)*MatchMål2) as plusmål,
-Sum((LagID=MatchLag1)*MatchMål2 + (LagID=MatchLag2)*MatchMål1) as minusmål,
plusmål - minusmål as målskillnad
FROM tblLag LEFT JOIN tblMatcher
ON (LagID=MatchLag1 Or LagID = MatchLag2)
GROUP BY LagID, LagNamn
ORDER BY 7 DESC
Tack. Men när jag testar den i access får jag felet.
Kopplingsuttrycket stöds inte.
Den klagar på
ON (LagID=MatchLag1 Or LagID = MatchLag2)
LarsGMedlem sedan dec. 200012 464 inlägg Om du går tillbaka till det ursprungliga villkoret då?
ON (LagID=MatchLag1) Or (LagID = MatchLag2)
Jag blir aldrig klok på Access och när man får/måste använda parenteser eller inte.
LarsGMedlem sedan dec. 200012 464 inlägg Om du helt och hållet använder det ursprungliga då?
ON ([tblLag].[LagID]=[tblMatcher].[MatchLag1])
Or ([tblLag].[LagID]=[tblMatcher].[MatchLag2])
Den frågan har väl fungerat?
En ny fråga.
Hur mycket behöver ändras för att den här frågan ska fungera med mySQL?
LarsGMedlem sedan dec. 200012 464 inlägg SELECT LagID,
LagNamn,
@antal := Count(MatchId) AS Antal,
@vinster :=
Sum((LagID=MatchLag1 And MatchMål1 > MatchMål2 )
Or (LagID=MatchLag2 And MatchMål1<MatchMål2)) AS Vinster,
@oavgjort :=
Sum(MatchMål1=MatchMål2) AS Oavgjort,
@antal - @Vinster - @Oavgjort as Förluster ,
@vinster*2 + @oavgjort AS poang,
@plusmal :=
Sum((LagID=MatchLag1)*MatchMål1 + (LagID=MatchLag2)*MatchMål2) as plusmål,
@minusmal :=
Sum((LagID=MatchLag1)*MatchMål2 + (LagID=MatchLag2)*MatchMål1) as minusmål,
@plusmal - @minusmal as målskillnad
FROM tblLag LEFT JOIN tblMatcher
ON LagID=MatchLag1 Or LagID = MatchLag2
GROUP BY LagID, LagNamn
ORDER BY 7 DESC
Tack.
Fungerar perfekt :)
Ett litet problem. jag har nu anpassat frågan till mina riktiga tabeller. Problemet är att målskillnad och poäng tas från det sämsta laget och blir samma för alla lag
frågan
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := Sum((s_deltagande_lag.ID=s_matcher.lagid_a
And s_matcher.resultat_a > s_matcher.resultat_b )Or (s_deltagande_lag.ID=s_matcher.lagid_b
And s_matcher.resultat_a < s_matcher.resultat_b)) AS win,
@tie := Sum(s_matcher.resultat_a=s_matcher.resultat_b) AS tie,
@games - @win - @tie as lost , @win*2 + @tie AS poang,
@plus := Sum((s_deltagande_lag.ID=lagid_a*s_matcher.resultat_a + (s_deltagande_lag.ID=s_matcher.lagid_b)*s_matcher.resultat_b) as plus,
@minus := Sum((s_deltagande_lag.ID=s_matcher.lagid_a)*resultat_b + (s_deltagande_lag.ID=s_matcher.lagid_b)*s_matcher.resultat_a) as minus,
@plus - @minus as plusminus FROM s_deltagande_lag LEFT JOIN s_matcher ON (s_deltagande_lag.ID=s_matcher.lagid_a) Or (s_deltagande_lag.ID=s_matcher.lagid_b)
where(s_deltagande_lag.serie_ID = 2)
GROUP BY s_deltagande_lag.ID, s_deltagande_lag.Namn ORDER BY 8 DESC ,11 desc, 9 desc, 10 desc