Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Necesito mostrar lo que no existe (https://www.clubdelphi.com/foros/showthread.php?t=38789)

Runner 28-12-2006 18:30:41

Necesito mostrar lo que no existe
 
Hola. Es mi primer mensaje aqui, ya que hasta ahora habia solucinado todo leyendo de este foro.

Tengo una tabla con fichadas de personal y los siguientes campos:

nrolegajo
fecha
hora

necesito hacer una consulta que me arroje los dias que no hubo fichada para cada nro de legajo.
Por ejemplo si el empleado nro 23 ficho todo menos el dia 12 y 14 del mes, necesito que me lo muestre.

Estoy utilizando firebird 1.5

Gracias

TJose 28-12-2006 18:40:51

Hola Runner

Yo buscaría la solución utilizando procedimientos almacenados

TJose 28-12-2006 18:43:00

Hola Runner

Yo buscaría la solución utilizando procedimientos almacenados. No se bien como, pero probaría abriendo un cursor, recorriéndolo y viendo si existe el día. Me parece que va por ese lado.

Saludos
TJose

nemesio 29-12-2006 02:23:26

Puedes probar usando una subconsulta usando un Not In.

Saludos

Lepe 29-12-2006 11:48:29

nemesio, ¿cual es tu idea?

Será que estoy atontado, pero no se me ocurre de momento

Código SQL [-]
  select fecha 
from personal
 where fecha not in (select fecha from personal)

Si la fecha no existe, ¿como se mostraría? Quizás sea por medio de UDFs, pero lo dicho, no caigo... no caigo... (será que es el último viernes del año :D)

Saludos

Runner 29-12-2006 16:19:22

gracias
 
Ya lo resolvi con un store procedure.

Gracias por prestarme atencion.


Feliz anio nuevo a todo el mundo.

roman 29-12-2006 18:15:33

¿Podrías poner el procedimiento que usaste? De esa forma ayudarías a otros que requieran algo similar.

// Saludos

Runner 30-12-2006 13:37:35

Procedimiento
 
Hola. El codigo es el siguiente.

Código SQL [-]
CREATE PROCEDURE FALTAS(
  LEGAJO INTEGER,
  DESDE DATE,
  HASTA DATE)
RETURNS(
  DIAS VARCHAR(100) CHARACTER SET NONE,
  FALT VARCHAR(100) CHARACTER SET NONE)
AS
DECLARE VARIABLE LEG INTEGER;
DECLARE VARIABLE FEC SMALLINT;
DECLARE VARIABLE CON INTEGER;
BEGIN
  dias=''; falt='';
  CON=extract(day from desde);
  while (con<(extract(day from hasta)+1)) do
  begin
     for select distinct legajo,extract(day from fecha)
         from horario
         where (fecha between :desde and :hasta) and legajo=:legajo
         order by fecha
         into :leg, :fec
     do
     begin
        if (fec=con) then
        begin
           dias = dias || cast(fec as varchar(2)) || '-';
           break;
        end
     end
     if (fec!=con) then falt=falt || cast(con as varchar(2)) || '-';
     con=con+1;
  end
  SUSPEND;
END ^

SET TERM ; ^


Este me da dos cadenas, una con los dias fichados y otro con los dias no fichados.
Los parametros de fecha tienen que ser del mismo mes. Y el codigo esta sin depurar. Puede haber algun error. Ahora me funciona con los datos de prueba.
Escriba antes cualquier critica, por favor.
Gracias.


La franja horaria es GMT +2. Ahora son las 23:46:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi