none
Seleccionar los registros de una tabla que no existen en otra RRS feed

  • Pregunta

  • Saludos expertos. Tengo una consulta para ustedes, Tengo una tabla en la cual inserto todos los Alumnos de un Centro Educativo y otra tabla en la que registro las facturas de los pagos registrados por los alumnos. considerando estas dos tablas necesito extraer una lista de los alumnos que no han realizado los pagos correspondientes a un rango de fecha determinado por el usuario. A continuación les muestro las tablas. Agradezco desde ya sus aportes.

    TB_Estudiantes
    IdEstudiante (PK, int, not null)
    Est_PrimerNombre (varchar(15), null)
    Est_SegundoNombre (varchar(15), null)
    Est_PrimerApellido (varchar(15), null)
    Est_SegundoApellido (varchar(15), null)
    Est_FechaNacimiento (datetime, null)
    Est_Edad (int, null)
    IdCurso (int, null)
    Est_CuotaMensual (numeric(18,2), null)
    IdAnioEscolar (int, null)
    FechaInscripcion (datetime, null)
    Est_NumeroSegSocial (varchar(20), null)
    Est_NumeroAfiliado (varchar(20), null)
    IdCompaniaAseguradora (int, null)
    Est_Estado (varchar(1), null)
    Est_Foto (image, null)

    TB_Facturas
    IdAnioEscolar (int, null)
    IdMes (int, null)
    IdCurso (int, null)
    IdEstudiante (int, null)
    Fac_NombreEstudiante (varchar(100), null)
    IdFactura (PK, int, not null)
    IdTipoFactura (int, null)
    Fac_NumeroFactura (varchar(25), null)
    Fac_Fecha (datetime, null)
    Fac_FechaPago (datetime, null)
    Fac_Monto (numeric(18,2), null)
    Fac_Descuento (numeric(18,2), null)
    Fac_Mora (numeric(18,2), null)
    Fac_TotalFacturado (numeric(18,2), null)
    Fac_Comentario (varchar(250), null)
    IdCondicionPago (int, null)
    Fac_CuotaSaldada (varchar(2), null)
    Fac_Estado (nchar(1), null)

    domingo, 4 de octubre de 2015 16:07

Respuestas

  • Hola soyeddygh,

    Primero déjame hacerte algunas sugerencias respecto las tablas que nos mencionas:

    1. La columna [TB_Estudiantes].[Est_FechaNacimiento] debería tener un tipo de sólo fecha: date.
    2. La columna [TB_Estudiantes].[Est_Edad] debería tener un tipo numérico más reducido: tinyint.
    3. La columna [TB_Estudiantes].[Est_Estado] debería tener un tipo char(1) de igual manera la columna [TB_Facturas].[Fac_Estado]

    Respecto a tu requerimiento tienes dos formas de hacerlo, puedes combinar todas las filas de la tabla [TB_Estudiantes] con la tabla [TB_Facturas]  (OUTER JOIN) según la condición propuesta obteniendo todas las filas donde no hayan registros coincidentes. Una segunda forma es probar la existencia de registros en la tabla [TB_Facturas] según una expresión condicional, te expondré está segunda manera:

    DECLARE @FechaInicio date;
    DECLARE @FechaFin date;
    
    SELECT
    	estu.IdEstudiante,
    	estu.Est_PrimerNombre,
    	estu.Est_SegundoNombre,
    	estu.Est_PrimerApellido,
    	estu.Est_SegundoApellido,	
    	estu.IdAnioEscolar,	
    	estu.Est_Estado
    FROM
    	TB_Estudiantes AS estu
    WHERE
    	NOT EXISTS (SELECT 1 FROM TB_Facturas AS fact WHERE (fact.IdEstudiante = estu.IdEstudiante) AND (CONVERT(date, Fac_FechaPago) BETWEEN @FechaInicio AND @FechaFin))
    	/*No estoy seguro si la fecha a la que refieres es el campo [Fac_Fecha] o [Fac_FechaPago], coloca la correcta*/


    • Editado Willams Morales domingo, 4 de octubre de 2015 16:44
    • Marcado como respuesta soyeddygh domingo, 4 de octubre de 2015 18:06
    domingo, 4 de octubre de 2015 16:43