webForumDet fria alternativet

Hjälp med sql-fråga

10 svar · 326 visningar · startad av andreas_lindh

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#1

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
#2

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
andreas_lindhMedlem sedan jan. 20011 140 inlägg
#3

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
#4

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.

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#5

Tyvärr. Ger samma fel

LarsGMedlem sedan dec. 200012 464 inlägg
#6

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?

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#7

Tack. Nu fungerar det :)

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#8

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
#9
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
andreas_lindhMedlem sedan jan. 20011 140 inlägg
#10

Tack.
Fungerar perfekt :)

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#11

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
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)