PDA

Ver la Versión Completa : Una mano por favor


Manuel
05-05-2003, 21:15:57
Hola amigos del Foro:

Tengo lo siguiente tr5abajo en delphi 5.0 con interbase 5.5, necesito hacer una query, que me indique los alumnos que tiene 5 o más atrasos activos. las tablas son las siguientes:

Alumnos
------------
Campo Tipo

Rut float (Campo Clave)
Nombrte Char(50)
.
.
.


Atrasos
----------

Campo Tipo

Rut Float
Fecha Date
Activo Smallint


Un alumnos puede tener n atrasos el campo Activo = 1 me indica que esta vigente el registro. como podría hacerlo?

gracias amigos del foro.

__cadetill
05-05-2003, 21:22:50
si no me he equivocado, el SQL siguiente te muestra los alumnos que tienen atrasos y cuantos tienen


select a.rut, a.nombre, count(*)
from alumnos a join atrasos s on (s.CampoTipo = a.CampoTipo and
s.activo = 1)
group by a.rut, a.nombre

delphi.com.ar
07-05-2003, 02:28:26
Me parece que te equivocaste, porque precisamente falta que filtres los que tienen mas de 5 atrasos y me parece que te equivocaste en la relación, no te culpo porque la verdad que el enunciado no está muy claro.

SELECT ALUMNOS.RUT, NOMBRE, COUNT(*) ATRASOS
FROM ALUMNOS, ATRASOS
WHERE ALUMNOS.RUT = ATRASOS.RUT
AND ACTIVO = 1
GROUP BY ALUMNOS.RUT, NOMBRE
HAVING COUNT(*) >= 5

ó

SELECT ALUMNOS.RUT, NOMBRE, COUNT(*) ATRASOS
FROM ALUMNOS JOIN ATRASOS ON (ALUMNOS.RUT = ATRASOS.RUT
)
WHERE ACTIVO = 1
GROUP BY ALUMNOS.RUT, NOMBRE
HAVING COUNT(*) >= 5

Vale aclarar que desconozco el ANSI de Interbase

__cadetill
07-05-2003, 09:38:44
Posteado originalmente por delphi.com.ar
Me parece que te equivocaste, porque precisamente falta que filtres los que tienen mas de 5 atrasos y me parece que te equivocaste en la relación


Lo del Having es cierto, no me habia fijado que solo pedia >= 5 :o

Lo de la relacion, pues que decida Manuel por que campos se unen las dos tablas porque yo sigo sin verlo claro :p