Consulta como referencia cruzada.

29/07/2005 - 22:55 por nelva | Informe spam
Tengo un archivo .csv. con el siguiente esquema: (control de marcada)

emp_id fecha time ect.
1 14/01/05 08:00:00 am
1 14/04/05 17:00:00 pm
2 14/04/05 08:00:00 am
2 14/04/05 17:00:00 pm


quisiera poder ponerlos en una tabla de la siguiente forma:

emp_id fecha Entrada SAlida
1 14/01/05 08:00:00 am 17:00:00 pm
2 14/04/05 08:00:00 am 17:00:00 pm

Preguntas similare

Leer las respuestas

#6 nelva
30/07/2005 - 21:45 | Informe spam
La consulta corre pero tengo un problema Se me repite una fila Ej:. el
5/5/2005 se muestra bien la primera entrada y salida, pero luego me vuelve a
mostrar otra fila y me pone la entrada como salida. ej/: salida= 07:58:55
cuando eso es la entrada de la primera fila que es correcta.

5/ 4/2005 17:16:27 238325 Alma Gutierrez
5/ 5/2005 07:58:55 17:17:31 238325 Alma Gutierrez
5/ 5/2005 07:58:55 238325 Alma Gutierrez
5/ 6/2005 07:52:41 17:12:49 238325 Alma Gutierrez
5/ 6/2005 07:52:41 238325 Alma Gutierrez
5/ 9/2005 07:55:21 17:16:59 238325 Alma Gutierrez
5/ 9/2005 07:55:21 238325 Alma Gutierrez
5/10/2005 07:51:51 18:02:41 238325 Alma Gutierrez

"Alejandro Mesa" escribió en el
mensaje news:
Correccion,

select b.[date], a.[time] as entrada, b.[time] as salida, b.[id], b.[name]
from t1 as a right outer join t1 as b on a.[id] = b.[id] and a.[date] > b.[date] and a.[time] < b.time


AMB

"Alejandro Mesa" wrote:

> Trata:
>
> select b.[date], a.[time] as entrada, b.[time] as salida, b.[id],


b.[name]
> from t1 as a right outer join t1 as b on a.[date] = b.[date] and


a.[time] <
> b.time
>
>
> AMB
>
> "nelva" wrote:
>
> > Date Time ID
> > Name
> > 5/ 4/2005 17:12:27 238264 Alma Cuadra
> > 5/ 5/2005 07:55:28 238264 Alma Cuadra
> > 5/ 5/2005 17:03:58 238264 Alma Cuadra
> > 5/ 6/2005 07:55:48 238264 Alma Cuadra
> > 5/ 6/2005 17:05:48 238264 Alma Cuadra
> > 5/ 9/2005 08:00:06 238264 Alma Cuadra
> > 5/ 9/2005 17:06:34 238264 Alma Cuadra
> > 5/10/2005 07:55:47 238264 Alma Cuadra
> >
> >
> >
> > Este es el dato que tengo, y a lo que quisiera llegar a la hora de
> > importarlo es:
> >
> > Date Entrada Salida ID
> > Nombre
> > 5/4/2005 17:12:27 238264
> > Alma
> > 5/5/2005 07:55:28 17:03:58 238264


"
> > lo que quiero es que para la fecha ej. 5/5/2005 me ponga por columna


la
> > hora en la que entro y la hora que salio. a fin de que pueda calcular


los
> > tiempos extras o tardes.
> >
> >
> >
> > "Alejandro Mesa" escribió en


el
> > mensaje news:
> > > Los resultados no son iguales a los esperados, pero creo que se debe


a un
> > > error al tipear.
> > >
> > > > > emp_id fecha time ect.
> > > > > 1 14/01/05 08:00:00 am
> > > > > 1 14/04/05 17:00:00 pm
> > > > > 2 14/04/05 08:00:00 am
> > > > > 2 14/04/05 17:00:00 pm
> > >
> > > Si te fijas en la segunda fila, la fecha es 14/04/05. Me pregunto si


debio
> > > haber sido 14/01/05. De esta forma los resultados seran iguales a


los que
> > > pedistes.
> > >
> > >
> > > AMB
> > >
> > > "Alejandro Mesa" wrote:
> > >
> > > > Nelva,
> > > >
> > > > Al parecer estan almacenando los valores de fecha en una columna


tipo
> > char /
> > > > varchar, y a pesar de los problemas causados por almacenar los


valores
> > de
> > > > años usando dos digitos, lo hacen de esta forma. Tambien parece


que
> > guardan
> > > > los valores de tiempo en una columna tipo char / varchar, en


formato 24
> > horas
> > > > pero ademas con AM / PM (interesante). Por que no rediseñan la


tabla y
> > > > guardan estos valores en una columna datetime?. Aca posteo una


posible
> > > > solucion, pero como veras, es horrible de leer, de entender, asi


como la
> > > > performance.
> > > >
> > > > select
> > > > emp_id,
> > > > fecha,
> > > > convert(varchar(12), entrada, 108) + ' ' +


right(convert(varchar(25),
> > > > entrada, 100), 2) as entrada,
> > > > convert(varchar(12), salida, 108) + ' ' +


right(convert(varchar(25),
> > > > salida, 100), 2) as salida
> > > > from
> > > > (
> > > > select
> > > > emp_id,
> > > > fecha,
> > > > min(
> > > > cast(
> > > > case
> > > > when cast(right(fecha, 2) as int) < 50 then '20'
> > > > else '19'
> > > > end + right(fecha, 2) + '-' + substring(fecha, 4, 2) + '-' +


left(fecha,
> > > > 2) + 'T' + cast(tiempo as varchar(8))
> > > > as datetime)
> > > > ),
> > > > max(
> > > > cast(
> > > > case
> > > > when cast(right(fecha, 2) as int) < 50 then '20'
> > > > else '19'
> > > > end + right(fecha, 2) + '-' + substring(fecha, 4, 2) + '-' +


left(fecha,
> > > > 2) + 'T' + cast(tiempo as varchar(8))
> > > > as datetime)
> > > > )
> > > > from
> > > > t1
> > > > group by
> > > > emp_id,
> > > > fecha
> > > > ) as t(emp_id, fecha, entrada, salida)
> > > > go
> > > >
> > > > drop table t1
> > > > go
> > > >
> > > >
> > > > AMB
> > > >
> > > > "nelva" wrote:
> > > >
> > > > > Tengo un archivo .csv. con el siguiente esquema: (control de


marcada)
> > > > >
> > > > > emp_id fecha time ect.
> > > > > 1 14/01/05 08:00:00 am
> > > > > 1 14/04/05 17:00:00 pm
> > > > > 2 14/04/05 08:00:00 am
> > > > > 2 14/04/05 17:00:00 pm
> > > > >
> > > > >
> > > > > quisiera poder ponerlos en una tabla de la siguiente forma:
> > > > >
> > > > > emp_id fecha Entrada SAlida
> > > > > 1 14/01/05 08:00:00 am 17:00:00 pm
> > > > > 2 14/04/05 08:00:00 am 17:00:00 pm
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> >
> >
> >
Respuesta Responder a este mensaje
#7 Alejandro Mesa
31/07/2005 - 00:24 | Informe spam
Trata:

create table t1 (
fecha varchar(10),
tiempo varchar(8),
[id] int,
nombre varchar(50)
)
go

insert into t1 values('05/04/2005', '17:12:27', 238264, 'Alma Cuadra')
insert into t1 values('05/05/2005', '07:55:28', 238264, 'Alma Cuadra')
insert into t1 values('05/05/2005', '17:03:58', 238264, 'Alma Cuadra')
insert into t1 values('05/06/2005', '07:55:48', 238264, 'Alma Cuadra')
insert into t1 values('05/06/2005', '17:05:48', 238264, 'Alma Cuadra')
insert into t1 values('05/09/2005', '08:00:06', 238264, 'Alma Cuadra')
insert into t1 values('05/09/2005', '17:06:34', 238264, 'Alma Cuadra')
insert into t1 values('05/10/2005', '07:55:47', 238264, 'Alma Cuadra')
go

select
fecha,
case when min(tiempo) = max(tiempo) then null else min(tiempo) end as
entrada,
max(tiempo) as salida,
[id],
nombre
from
t1
group by
[id],
nombre,
fecha
order by
[id],
fecha
go

drop table t1
go


AMB

"nelva" wrote:

La consulta corre pero tengo un problema Se me repite una fila Ej:. el
5/5/2005 se muestra bien la primera entrada y salida, pero luego me vuelve a
mostrar otra fila y me pone la entrada como salida. ej/: salida= 07:58:55
cuando eso es la entrada de la primera fila que es correcta.

5/ 4/2005 17:16:27 238325 Alma Gutierrez
5/ 5/2005 07:58:55 17:17:31 238325 Alma Gutierrez
5/ 5/2005 07:58:55 238325 Alma Gutierrez
5/ 6/2005 07:52:41 17:12:49 238325 Alma Gutierrez
5/ 6/2005 07:52:41 238325 Alma Gutierrez
5/ 9/2005 07:55:21 17:16:59 238325 Alma Gutierrez
5/ 9/2005 07:55:21 238325 Alma Gutierrez
5/10/2005 07:51:51 18:02:41 238325 Alma Gutierrez

"Alejandro Mesa" escribió en el
mensaje news:
> Correccion,
>
> select b.[date], a.[time] as entrada, b.[time] as salida, b.[id], b.[name]
> from t1 as a right outer join t1 as b on a.[id] = b.[id] and a.[date] > > b.[date] and a.[time] < b.time
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
> > Trata:
> >
> > select b.[date], a.[time] as entrada, b.[time] as salida, b.[id],
b.[name]
> > from t1 as a right outer join t1 as b on a.[date] = b.[date] and
a.[time] <
> > b.time
> >
> >
> > AMB
> >
> > "nelva" wrote:
> >
> > > Date Time ID
> > > Name
> > > 5/ 4/2005 17:12:27 238264 Alma Cuadra
> > > 5/ 5/2005 07:55:28 238264 Alma Cuadra
> > > 5/ 5/2005 17:03:58 238264 Alma Cuadra
> > > 5/ 6/2005 07:55:48 238264 Alma Cuadra
> > > 5/ 6/2005 17:05:48 238264 Alma Cuadra
> > > 5/ 9/2005 08:00:06 238264 Alma Cuadra
> > > 5/ 9/2005 17:06:34 238264 Alma Cuadra
> > > 5/10/2005 07:55:47 238264 Alma Cuadra
> > >
> > >
> > >
> > > Este es el dato que tengo, y a lo que quisiera llegar a la hora de
> > > importarlo es:
> > >
> > > Date Entrada Salida ID
> > > Nombre
> > > 5/4/2005 17:12:27 238264
> > > Alma
> > > 5/5/2005 07:55:28 17:03:58 238264
"
> > > lo que quiero es que para la fecha ej. 5/5/2005 me ponga por columna
la
> > > hora en la que entro y la hora que salio. a fin de que pueda calcular
los
> > > tiempos extras o tardes.
> > >
> > >
> > >
> > > "Alejandro Mesa" escribió en
el
> > > mensaje news:
> > > > Los resultados no son iguales a los esperados, pero creo que se debe
a un
> > > > error al tipear.
> > > >
> > > > > > emp_id fecha time ect.
> > > > > > 1 14/01/05 08:00:00 am
> > > > > > 1 14/04/05 17:00:00 pm
> > > > > > 2 14/04/05 08:00:00 am
> > > > > > 2 14/04/05 17:00:00 pm
> > > >
> > > > Si te fijas en la segunda fila, la fecha es 14/04/05. Me pregunto si
debio
> > > > haber sido 14/01/05. De esta forma los resultados seran iguales a
los que
> > > > pedistes.
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Alejandro Mesa" wrote:
> > > >
> > > > > Nelva,
> > > > >
> > > > > Al parecer estan almacenando los valores de fecha en una columna
tipo
> > > char /
> > > > > varchar, y a pesar de los problemas causados por almacenar los
valores
> > > de
> > > > > años usando dos digitos, lo hacen de esta forma. Tambien parece
que
> > > guardan
> > > > > los valores de tiempo en una columna tipo char / varchar, en
formato 24
> > > horas
> > > > > pero ademas con AM / PM (interesante). Por que no rediseñan la
tabla y
> > > > > guardan estos valores en una columna datetime?. Aca posteo una
posible
> > > > > solucion, pero como veras, es horrible de leer, de entender, asi
como la
> > > > > performance.
> > > > >
> > > > > select
> > > > > emp_id,
> > > > > fecha,
> > > > > convert(varchar(12), entrada, 108) + ' ' +
right(convert(varchar(25),
> > > > > entrada, 100), 2) as entrada,
> > > > > convert(varchar(12), salida, 108) + ' ' +
right(convert(varchar(25),
> > > > > salida, 100), 2) as salida
> > > > > from
> > > > > (
> > > > > select
> > > > > emp_id,
> > > > > fecha,
> > > > > min(
> > > > > cast(
> > > > > case
> > > > > when cast(right(fecha, 2) as int) < 50 then '20'
> > > > > else '19'
> > > > > end + right(fecha, 2) + '-' + substring(fecha, 4, 2) + '-' +
left(fecha,
> > > > > 2) + 'T' + cast(tiempo as varchar(8))
> > > > > as datetime)
> > > > > ),
> > > > > max(
> > > > > cast(
> > > > > case
> > > > > when cast(right(fecha, 2) as int) < 50 then '20'
> > > > > else '19'
> > > > > end + right(fecha, 2) + '-' + substring(fecha, 4, 2) + '-' +
left(fecha,
> > > > > 2) + 'T' + cast(tiempo as varchar(8))
> > > > > as datetime)
> > > > > )
> > > > > from
> > > > > t1
> > > > > group by
> > > > > emp_id,
> > > > > fecha
> > > > > ) as t(emp_id, fecha, entrada, salida)
> > > > > go
> > > > >
> > > > > drop table t1
> > > > > go
> > > > >
> > > > >
> > > > > AMB
> > > > >
> > > > > "nelva" wrote:
> > > > >
> > > > > > Tengo un archivo .csv. con el siguiente esquema: (control de
marcada)
> > > > > >
> > > > > > emp_id fecha time ect.
> > > > > > 1 14/01/05 08:00:00 am
> > > > > > 1 14/04/05 17:00:00 pm
> > > > > > 2 14/04/05 08:00:00 am
> > > > > > 2 14/04/05 17:00:00 pm
> > > > > >
> > > > > >
> > > > > > quisiera poder ponerlos en una tabla de la siguiente forma:
> > > > > >
> > > > > > emp_id fecha Entrada SAlida
> > > > > > 1 14/01/05 08:00:00 am 17:00:00 pm
> > > > > > 2 14/04/05 08:00:00 am 17:00:00 pm
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > >
> > >
> > >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida