En cuanto al error que da el TRIGGER, en realidad es bastante simple, pero no tengo ni idea de como lo vas a resolver, porque yo no le veo mucho sentido al uso del trigger en si. Yo usaría un SP para realizar el INSERT y haría todo en el.
El trigger en este contexto me parece un desperdicio de recursos.
El tema es así:
¿Ver esa última línea con "AND RESULTADOS.posicion < 4;"?
Bueno, esa última línea está fuera de la subconsulta de la tabla RESULTADOS, por lo que en realidad pertenecería al FROM PILOTOS... que no tiene el campo POSICION.
Eso sucede porque toda subconsulta en el WHERE contenida entre paréntesis encapsula la tabla que lee, por lo que su nombre y campos resulta inaccesible para la consulta mayor.
¿Se entiende?
Ese modelo de consulta la has replicado todas las veces, por lo que está siempre mal esscrita a lo largo de todo el trigger.
Para que no de error debería ser mas o menos así:
Pero la verdad no sé si eso cumple con la lógica que buscas. Eso lo tendrás que analziar tu.