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

#1 Alejandro Mesa
29/07/2005 - 22:46 | Informe spam
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
#2 Alejandro Mesa
29/07/2005 - 22:51 | Informe spam
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
#3 nelva
30/07/2005 - 01:10 | Informe spam
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
#4 Alejandro Mesa
30/07/2005 - 04:04 | Informe spam
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
#5 Alejandro Mesa
30/07/2005 - 04:06 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida