SebbeMedlem sedan jan. 20032 285 inlägg 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?
OveRRidEMedlem sedan feb. 200112 078 inlägg Varför inte göra alias med AS så kan du sortera efter namnet istället?
SebbeMedlem sedan jan. 20032 285 inlägg 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
LarsGMedlem sedan dec. 200012 464 inlägg 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