Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Como hacer esta consulta

Hola

Tengo un programa en donde debo realizar un informe de marcado.... la información que debo mostrar viene así (desde una consulta sql logro esto)

trabajo con SQL 2000 Server y Delphi 7

E/S Ficha Fecha Hora (Orden de las columnas)
1 1013 17/03/2008 18:00
0 1013 17/03/2008 20:01
1 1013 18/03/2008 17:50
0 1013 18/03/2008 20:11
1 1013 19/03/2008 18:05
0 1013 19/03/2008 19:57

pero necesito mostrar así los datos...

E Ficha Fecha Hora S Ficha Fecha Hora
1 1013 17/03/2008 18:00 0 1013 17/03/2008 20:01
1 1013 18/03/2008 17:50 0 1013 18/03/2008 20:11
1 1013 19/03/2008 18:05 0 1013 19/03/2008 19:57

Esto se puede realizar en una consulta SQL ??? bueno, la idea es que me muestre las entrada y salida de un mismo dia.... el otro problema que tengo... es que existen personas que marcan 4 o 6 veces en el día...

Si alguien tiene una idea de como realizar esto. ..??
__________________
BlueSteel
Responder Con Cita
  #2  
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
Poder: 23
poliburro Va por buen camino
Podrías mostrar la estructura de la tabla?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 20-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Con una subconsulta :

Código SQL [-]
Select E.E, E.Ficha as Ficha_E, E.Fecha as Fecha_E, E.Hora as Hora_E
(Select S.S, S.Ficha as Ficha_S, S.Fecha as Fecha_S, S.Hora as Hora_S
 from Tu_Tabla S
 where S.S = 0 and S.Fecha = E.Fecha)
from Tu_Tabla E where E.E = 1
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 20-03-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
Podrías mostrar la estructura de la tabla?
La estructura es

Tabla: Horario
Hor_Numero Numeric -> Incremental
Per_Nro Varchar(4) -> Numero asignado al funcionario
Hor_Tipo Char(1) -> Tipo de Evento 1 -> Entrada..... 0 -> Salida
Hor_Fecha DateTime -> Fecha y Hora del Evento

Código SQL [-]
Select Hor_Tipo, Per_Nro, CONVERT(Char(10), Hor_Fecha, 103) AS Fecha, CONVERT(Char(8), Hor_Fecha, 108) AS Hora
From  Horario

con la sentencia anterior me entrega esto
1 1013 17/03/2008 18:00
0 1013 17/03/2008 20:01
1 1013 18/03/2008 17:50
0 1013 18/03/2008 20:11
1 1013 19/03/2008 18:05
0 1013 19/03/2008 19:57
__________________
BlueSteel
Responder Con Cita
  #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
Poder: 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
  #6  
Antiguo 20-03-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
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

Ok.. Muchas Gracias... terminando de solucionar unos "cachos" probaré lo que me indicas...

Cita:
Empezado por poliburro Ver Mensaje
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),
Lamentablemente existen más de 2 movimiento por día.. y afecta a un 80 % de las personas que tenemos que marcar tarjeta....
__________________
BlueSteel
Responder Con Cita
  #7  
Antiguo 01-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Hola Poliburro

mira.. estas consultas en forma separada funcionan super bien (claro que le modifique por los campos que correspondian...)

Código SQL [-]
Select Hor_Tipo As E, Per_Nro As FichaE, 
       CONVERT(Char(10), Hor_Fecha, 103) AS FechaE,
       CONVERT(Char(8), Hor_Fecha, 108) AS HoraE
  From Horario
 Where Hor_Tipo = 1

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

y me entregan estos resultados

Código:
 
E FichaE FechaE HoraE
1 1005 18/02/2008 15:19:00
1 2003 18/02/2008 15:25:00
1 1012 18/02/2008 15:25:00

S FichaS FechaS HoraS
0 1012 18/02/2008 15:26:00
0 2010 18/02/2008 15:38:00
0 2011 18/02/2008 15:38:00
Cuando realizo la consulta en conjunto me da errores...

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

y este corresponderia al error
Código:
Servidor: mensaje 207, nivel 16, estado 3, línea 1
El nombre de columna 'FechaS' no es válido.
Servidor: mensaje 207, nivel 16, estado 1, línea 1
El nombre de columna 'HoraS' no es válido.
ahora.. se supone que la columna FechaS y HoraS se estan asignando con la subconsulta...

que podrá ser ???
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 01-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
se me olvidaba..

como mencione antes...

Lamentablemente existen más de 2 movimiento por día.. y afecta a un 80 % de las personas que tenemos que marcar tarjeta....

será por esto el error ???
__________________
BlueSteel
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hago esta consulta? MaMu MySQL 3 21-12-2007 14:51:17
Alguien sabe como puedo hacer esta conexion!!! Pitoniso Internet 2 19-05-2007 23:20:29
Se Puede Hacer Esta Consulta ? Renees Conexión con bases de datos 0 26-04-2006 18:32:32
como hacer que un scrollbox cuando esta deshabilitado se ponga gris? orfeo Varios 1 02-03-2004 06:09:27
Quiero Saber como hacer que un boton se vea que esta siendo pulsado Julio César Varios 2 27-11-2003 18:34:11


La franja horaria es GMT +2. Ahora son las 07:14:51.


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