Bases de Datos - Filtrar vista si existen dos (o más) registros

   
Vista:

Filtrar vista si existen dos (o más) registros

Publicado por Jose (2 intervenciones) el 03/06/2010 15:21:20
Hola a todos,

Para ponernos en situación, trata de un sistema de control de presencia en el trabajo.

Cuando un usuario sale antes de tiempo, genera dos incidencias en la tabla incidencias. Una por salida antes del horario previsto, y otra por ausencia.

El tema es que cuando los supervisores imprimen los partes de incidencias, salen dos partes, uno por incidencia, y querría que solo les saliera el de salida antes del horario previsto.

Para no liarla mucho en otras partes del sistema (hay varios programas involucrados) quiero hacer una vista nueva en la que salga esta tabla filtrada, tal que solamente me muestre los registros que sean SALIDA ANTES DEL HORARIO y no los de Ausencia.

Y los otros tipos de incidencia que los deje tal cual estan.

En el ejemplo a continuación, vemos la vista actual. Le he sacado columnas para no liar más la cosa. Querría mostrar las dos primeras filas, y de las cuatro últimas, solamente las dos que pone SalidaAntesHorarioPrevisto como descripción de incidencia.
Código:

EMP NOMBRE DESCRIPCIONINCIDENCIA FECHA NUMERO
23 NOMBRE FICTICIO1 AusenciaNoJustificada 19/02/2010 110614
23 NOMBRE FICTICIO1 AusenciaNoJustificada 19/02/2010 110635
57 NOMBRE FICTICIO2 SalidaAntesHorarioPrevisto 19/02/2010 110641
57 NOMBRE FICTICIO2 AusenciaNoJustificada 19/02/2010 110642
61 NOMBRE FICTICIO3 SalidaAntesHorarioPrevisto 18/02/2010 110597
61 NOMBRE FICTICIO3 AusenciaNoJustificada 18/02/2010 110598

Cual seria la manera más facil de conseguirlo?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Filtrar vista si existen dos (o más) registros

Publicado por Franklin Gamboa (188 intervenciones) el 03/06/2010 16:45:14
la manera mas sencilla de conseguilo es filtrando por la columna DESCRIPCIONINCIDENCIA, de esta manera:

Where DESCRIPCIONINCIDENCIA like 'Salida%'

Esto dejará de lado las "AusenciasNoJustificadas", trayendo solo las columnas que empiecen por "Salidas".

Saludos,

Frank
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Filtrar vista si existen dos (o más) registros

Publicado por Jose (2 intervenciones) el 03/06/2010 19:07:56
Sí, pero también me ocultaria las dos primeras filas del ejemplo, y esas las quiero mostrar. Por así decirlo, quiero mostrar TODOS los registros que estén una vez por dia y solamente los de Salida% que tengan dos registros en el mismo dia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Filtrar vista si existen dos (o más) registros

Publicado por Franklin Gamboa (188 intervenciones) el 03/06/2010 22:26:07
Eso lo hace mas complejo, mas no imposible. OK, asi va el rollo.

Los datos pueden pertenecer a dos conjuntos diferentes, Auscencia Injustificada y Salida Antes de Horario

Ambos conjuntos tienen diferentes propiedades dentro de ellos, como es la fecha y el numero de empleado

Lo que debes haces es, primero, obtener los registros pertenecientes a las salidas, de aqui nos interesa el numero de empleado y la fecha, despues vas a ir a obtener las Ausecncias Injustificadas DEJANDO DE LADO los registros que existan para ese empleado en esa fecha específica. Ejemplo.

Empleado Desc Fecha
1 Salida 01/01/2010
1 Auscensia 01/01/2010
2 Auscencia 01/01/2010
3 Auscencia 01/01/2010
4 Salida 01/01/2010
4 Auscencia 01/01/2010

Al buscar primero las salidas, obtenemos esto:

Empleado Desc Fecha
1 Salida 01/01/2010
4 Salida 01/01/2010

Si al conjunto de datos inicial le filtramos los registros pertenecientes a estos empleados para estas fechas, tendremos:

Empleado Desc Fecha
2 Auscencia 01/01/2010
3 Auscencia 01/01/2010

Si luego le adicionamos el conjunto de datos que acabamos de obtener, tendremos:

Empleado Desc Fecha
1 Salida 01/01/2010
4 Salida 01/01/2010
2 Auscencia 01/01/2010
3 Auscencia 01/01/2010

Para hacer esto, en tu vista debes usar un subquery (para eliminar los repetidos) y un union (para obtener el resultado como arriba), si tienes alguna consulta dejamela saber.

Saludos,

Frank
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar