Ver Mensaje Individual
  #5  
Antiguo 20-03-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Reputación: 23
poliburro Va por buen camino
Ok, lo que necesitamos es ver el movimiento de entrada y salida para cada día de la semana. Sencillo:

Vamos a generar los dominios para cada tipo de evento y para cada día de la semana considerando que en una fecha existen dos movimientos (si existieran más, se tienen que hacer consideraciones adicionales),
así que tomaremos como referencia la fecha


Código SQL [-]
//Para las entradas

Select Hor_Tipo As E, Per_Nr As FichaE, 
       CONVERT(Char(10), Hor_Fecha, 103) AS FechaE,
       CONVERT(Char(8), Hor_Fecha, 108) AS HoraE
  From Horario
 Where HorTipo = 1

// Para las salidas

Select Hor_Tipo As S, Per_Nr As FichaS, 
       CONVERT(Char(10), Hor_Fecha, 103) AS FechaS
       CONVERT(Char(8), Hor_Fecha, 108) AS HoraS
  From Horario
 Where HorTipo = 0


Ahora obtenemos el producto de las tablas

Código SQL [-]
   Select Entrada.E, Entrada.FichaE, Entrada.FechaE, Entrada.HoraE,
          Salida.S,  Saalida.FichaS, Entrada.FechaS, Entrada.HoraS
     From (
           Select Hor_Tipo As E, Per_Nr As FichaE, 
                  CONVERT(Char(10), Hor_Fecha, 103) AS FechaE,
                  CONVERT(Char(8), Hor_Fecha, 108) AS HoraE
             From Horario
            Where HorTipo = 1
          ) As Entrada
Left Join (
           Select Hor_Tipo As S, Per_Nr As FichaS, 
                  CONVERT(Char(10), Hor_Fecha, 103) AS FechaS
                  CONVERT(Char(8), Hor_Fecha, 108) AS HoraS
             From Horario
            Where HorTipo = 0
          ) As Salida
       On Entrada.FechaE = Salida.FechaS And
          Entrada.FichaE = Salida.FichaS

Te preguntarás por que left y no inner bueno, sencillamente por que así detectaras
a quienes registraron su entrada pero no la salida.

Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita