public String getpromedioGeneral(Int64 id_estudiante) { clsDb db = new clsDb(); String SQL = "select id_estudiante,sum(promedio)/count(*) as promedioFinal from ( " + "select id_estudiante,sum(promedio)/count(distinct d.id_asignacion) as promedio,idarea,descripcion " + "from( SELECT " + " c.id_estudiante, c.id_asignacion,ar.id as idarea,ar.descripcion, " + " CAST ( ((SUM(c.valor * cc.porcentaje / 100.0))*(convert(float,asp.porcentaje)/10) )/(select nota_maxima from dbo.anio_escolar where estado='A') As decimal(18,2)) AS promedio " + " FROM dbo.calificacion c " + " INNER JOIN dbo.calificacion_configuracion cc ON cc.id = c.id_calificacion_configuracion " + " INNER JOIN dbo.asignacion a ON a.id = c.id_asignacion " + " INNER JOIN dbo.materia m ON m.id = a.id_materia " + " INNER JOIN dbo.estudiante e ON e.id = c.id_estudiante " + " inner join dbo.anio_escolar_periodo asp on asp.id=cc.id_periodo " + " INNER JOIN area ar ON ar.id =m.id_area " + " WHERE id_estudiante = " + id_estudiante + " " + " AND cc.id_periodo <= 4 " + " AND cc.estado = 'A' " + " AND c.estado = 'A' " + " AND e.estado = 'A' " + " GROUP BY c.id_estudiante,c.id_asignacion " + " ,M.descripcion " + " ,asp.porcentaje, " + " ar.id " + " ,ar.descripcion " + " ) d " + " group by id_estudiante,idarea,descripcion " + " ) as f " + " group by id_estudiante"; String calificacion = ""; try { SqlConnection con = db.conexion(); con.Open(); SqlCommand com = new SqlCommand(SQL, con); SqlDataReader reader = com.ExecuteReader(); while (reader.Read()) { calificacion = Convert.ToDecimal(reader["promedioFinal"].ToString()).ToString("#.##"); } con.Close(); return(calificacion); } catch (Exception ex) { return(calificacion); } }