Jag håller på med ett system för att skapa en serietabell från ett matchschema i fotboll. Den nuvarande SQL-satsen för att ta ut lagens statistik ser ut såhär:
SELECT id, lagNamn,
((SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) * 3 + (SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal)),
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)),
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal),
(SELECT COUNT(*) FROM matcher WHERE hemmaLag = lag.id OR bortaLag = lag.id)
FROM lag
ORDER BY 3 DESC
Mitt problem är att lagen inte sorteras efter deras poäng (vilket 'ORDER BY 3 DESC' borde göra), utan de visas i den ordningen som de lades in i databasen. Någon som har en aning om hur jag kan lösa problemet?
Ingen aning varför, men då får jag felmeddelandet
'Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.' :o
Vissa exempel som jag har sett tyder på Access har problem med att sortera med avseende på komplexa uttryck
select * from (
SELECT id, lagNamn,
((SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) * 3 + (SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal)) points,
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) as won,
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal) as draw,
(SELECT COUNT(*) FROM matcher WHERE hemmaLag = lag.id OR bortaLag = lag.id) as played
FROM lag ) dt
ORDER BY points DESC