Pova così:
codice:
CREATE VIEW occup_sale AS
SELECT room.name AS Sala, DATE_FORMAT(date, '%Y') as Anno, ((COUNT(isnull(id_prenotation,0))*100)/total)/COUNT(DISTINCT show.id_show) AS Occupazione
FROM
room
inner join show
on room.id_room=show.id_room
left join prenotation
on prenotation.id_show=show.id_show
GROUP BY Anno
Non so se ci sono errori ma dovrebbe andare.
Dunque, per prima cosa devi porre che non è detto che vi sia legame fra show e prenotation, quindi un join a livello di where non può andare (in oracle mi pare che si possa fare con una sintassi tipo (+)= o una cosa simile).
Leghi room e show che sicuramente sono legati, ma leghi poi show e prenotation con una left, in questo modo dai la precedenza a show che sta a sinistra, così se anche non ci sono prenotazioni comunque te lo tira fuori.
L'altro inconveniente è che anche se non ci sono prenotazioni con questo sistema te ne conta sempre almeno una (vedi l'isnull che ho aggiunto).
Dovresti pensare ad una select un pò più complessa al limite