SkarreMedlem sedan apr. 20012 447 inlägg
Jag har information om spelade basketmatcher i tabellen "games" och jag vill räkna ut gjorda poäng, alltså summan "homescore" där ett givet lag var hemmalag plus summan av awayscore där det givna laget var bortalag. Med andra ord vill jag kombinera dessa två frågor:
SELECT SUM(homescore) FROM games WHERE hometeam = 1
SELECT SUM(awayscore) FROM games WHERE awayteam = 1;
I förlängningen kommer jag även att behöva räkna ut insläppta poäng:
SELECT SUM(homescore) FROM games WHERE awayteam = 1
SELECT SUM(awayscore) FROM games WHERE hometeam = 1;
... och målskillnad d.v.s. gjorda poäng minus insläppta poäng.
GladhMedlem sedan maj 20013 024 inlägg
Du kan inte kombinera dessa två i en SQL sats eftersom du vill ha information för 2 olika vilkor.
Du kan lösa det med en UNION mellan dina 2 SQL satser då kommer du få tillbaka 1 resultat. Annars så kanske detta fungerar, har inte testat så jag vet fasktiskt inte.
SELECT TOP 1 (SELECT SUM(homescore) FROM games WHERE hometeam = 1) as test, (SELECT SUM(awayscore) FROM games WHERE awayteam = 2) as test2 FROM games
- M
LarsGMedlem sedan dec. 200012 465 inlägg
select sum(case when hometeam = 1 then homescore
when awayteam = 1 then awayscore
else 0 end) as totalScore
from games
where 1 in (hometeam,awayteam)
eller om du använder access
select sum(iif(hometeam=1,homescore,
iif(awayteam=1,awayscore,0))) as totalScore
from games
where 1 in (hometeam,awayteam)
SkarreMedlem sedan apr. 20012 447 inlägg
Du är helt underbar Lars! :)
SkarreMedlem sedan apr. 20012 447 inlägg
Jag har ytterligare en liten fundering angående detta. När laget inte spelat någon match och dess id således inte finns i tabellen "games" returnerar frågan NULL vilket pajar resultattabellen. Går det att se till att frågan returnerar 0 i detta fall?
LarsGMedlem sedan dec. 200012 465 inlägg
Har du någon tabell där alla lag finns? Säg att du har en sådan och den heter teams och har kolumnerna
teamid och teamname. I så fall kan du få summa för alla lag med
select teamname,
sum(case when hometeam = teamid then
homescore else 0 end +
case when awayteam = teamid then
awayscore else 0 end)
from teams left outer join games
on teamid in (hometeam,awayteam)
group by teamname
GladhMedlem sedan maj 20013 024 inlägg
select sum(case when hometeam = 1 then homescore
when awayteam = 1 then awayscore
else 0 end) as totalScore
from games
where 1 in (hometeam,awayteam)
Men då får man ju bara en totalsumma och inte 2 delsummor. Kan man få både AwaySum och HomeSum i en och samma SQL Sats.
- M
LarsGMedlem sedan dec. 200012 465 inlägg
Kan man få både AwaySum och HomeSum i en och samma SQL Sats.
Jo visst, det är inga problem.
GladhMedlem sedan maj 20013 024 inlägg
Jo visst, det är inga problem.
Så bra.. du förtsätter jag att leva i kunskap om att det går, men i okunskap hur man gör :) *morrrr*
- M
LarsGMedlem sedan dec. 200012 465 inlägg
select sum(case when hometeam = 1 then homescore
else 0 end) as totalHomescore,
sum(case when awayteam = 1 then awayscore
else 0 end) as totalawayScore
from games
where 1 in (hometeam,awayteam)
GladhMedlem sedan maj 20013 024 inlägg
Bläää... det borde jag ju kunnat lista ut. Snygg lösning, men hur snabb är den. Känns nästan som att 2 vanliga SQL frågor hade varit snabbare.
Tack för lösningen. :birp