SELECT DISTINCT employeename, trainingname, MAX(x) FROM (SELECT DISTINCT employeename, trainingname, desire + 2*priority AS x FROM employee, teamreq, wishlist, training WHERE (employee.employeeid=wishlist.employeeid AND training.trainingid=wishlist.trainingid) AND taken=0 AND desire > 0 AND priority > 0 AND (training.trainingid=teamreq.trainingid AND (teamreq.teamid=employee.employeeteam OR teamreq.teamid=employee.employeeteam2) ) UNION SELECT DISTINCT employeename, trainingname, desire AS x FROM employee, teamreq, wishlist, training WHERE (employee.employeeid=wishlist.employeeid AND training.trainingid=wishlist.trainingid) AND taken = 0 AND desire > 0 UNION SELECT DISTINCT employeename, trainingname, 2*priority AS x FROM employee, teamreq, wishlist, training WHERE (training.trainingid=teamreq.trainingid AND (teamreq.teamid=employee.employeeteam OR teamreq.teamid=employee.employeeteam2)) ORDER BY employeename) GROUP BY employeename, trainingname ORDER BY employeename, MAX(x) DESC