Tengo tres tablas.

De la ESCUELA: schoolcode(PK), año, schoolname.

MATRÍCULA: schoolcode, año, casta, c1, c2, c3, c4, c5, c6, c7, c8

CLASE: schoolcode, año, classid, habitaciones

Ahora, quiero encontrar la lista de escuelas con matrícula en clase-de 1 a 4 y el número de aulas utilizadas por la clase 1-4 (CLASSID se define como: 7 para la clase de 1&2, 8 para la clase 3&4, 9 para la clase de 5&6, 10 para la clase 7&8; y las castas se define como 1 por lo general, de 2 de sc, 3 para el pt, 4 para los demás).

He utilizado la siguiente consulta:

select m.schoolcode, m.schoolname, sum(e.c1+e.c2+e.c3+e.c4), sum(c.rooms) 
from dise2k_enrolment09 e, 
     dise2k_master m ,
     dise2k_clsbycondition c 
where m.schoolcode=e.schoolcode and
      m.schoolcode=c.schoolcode and 
      e.year='2011-12' and 
      m.year='2011-12' and 
      c.year='2011-12' and 
      c.classid in(7,8) and 
      e.caste in(1,2,3,4) 
group by m.schoolcode, m.schoolname 

Pero el resultado que aparece no es la correcta. La matrícula está mostrando mucho mayor que la real, el mismo en el caso de las aulas.

InformationsquelleAutor user1579132 | 2012-08-07

1 Comentario

  1. 6

    Ok, prueba esto a ver si el problema surge a partir de la duplicación de registros en unirse a:

    select m.schoolcode, m.schoolname, e_sum, c_sum 
      from dise2k_master m
     inner join
     (
        select schoolcode,
               sum(c1 + c2 + c3 + c4) e_sum
          from dise2k_enrolment09
         where year='2011-12'
           and caste in(1,2,3,4) 
         group by schoolcode
     ) e
        on m.schoolcode=e.schoolcode
     inner join
     (
        select schoolcode,
               sum(rooms) c_sum
          from dise2k_clsbycondition
         where year='2011-12'
           and classid in(7,8)
         group by schoolcode
     ) c
        on m.schoolcode=c.schoolcode
     where m.year='2011-12'

Dejar respuesta

Please enter your comment!
Please enter your name here