Para empezar quita el cursor, ahi estas matando el performance, tu proceso puede salir en un solo query, seria algo como esto:
Código SQL:
Ver originalSELECT t1.Nombre, t2.Descripcion, completa.faltas, completa.mes, completa.YEAR FROM usuario AS U
LEFT JOIN (
--Con esto sacamos cuantas veces falto el usuario por mes y año
SELECT COUNT(*) AS faltas, usuario_id, mes, YEAR FROM(
SELECT Usuario_Id, datepart(mm,Fecha) AS mes, datepart(yyyy, fecha) AS YEAR FROM ausencia) AS t1 GROUP BY mes,YEAR, usuario_id) AS completa ON (U.id=completa.usuario_id)
LEFT JOIN area AS t2 ON (t1.area_id=t2.id)
WHERE t2.descripcion='parametro' AND completa.YEAR=parametro
Ojo, este query sacaria los datos de las meses y años donde hay ausencias, si quieres el listado completo por año y los 12 meses haya o no ausencias, ps bueno esa es otra historia :)