Select dificil

02/01/2008 - 11:33 por Cristian Meneses | Informe spam
Buenas a todos
Logre hace unos dias gracias a la ayuda de Carlos M. Calvelo un select
que me permite tener el siguiente formato:
IDLegajo, Entrada (datetime), Salida (datetime)
Lo que quiero ahora es obtener algo mas complejo

IDLegajo, Ent1, Sal1, Ent2, Sal2, Ent3, Sal3, Ent4, Sal4, Ent5, Sal5,
Ent6, Sal6

y de esa forma resumir en una misma fila 6 grupos de accesos.
He probado con JOINS y no encuentro la forma de que me salga. Alguna
ayuda?
Gracias por adelantado


Cristian Meneses

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
02/01/2008 - 16:36 | Informe spam
Hola Cristian,


On 2 jan, 11:33, Cristian Meneses wrote:
Buenas a todos
Logre hace unos dias gracias a la ayuda de Carlos M. Calvelo un select
que me permite tener el siguiente formato:
IDLegajo, Entrada (datetime), Salida (datetime)
Lo que quiero ahora es obtener algo mas complejo

IDLegajo, Ent1, Sal1, Ent2, Sal2, Ent3, Sal3, Ent4, Sal4, Ent5, Sal5,
Ent6, Sal6

y de esa forma resumir en una misma fila 6 grupos de accesos.
He probado con JOINS y no encuentro la forma de que me salga. Alguna
ayuda?



Seguro que habrá mil y una formas de hacerlo.
A ver que tal va así:
(El FROM parece muy complicado pero es
6 veces casi lo mismo)


select
t1.IDLegajo,
t1.Entrada as Ent1, t1.Salida as Sal1,
t2.Entrada as Ent2, t2.Salida as Sal2,
t3.Entrada as Ent3, t3.Salida as Sal3,
t4.Entrada as Ent4, t4.Salida as Sal4,
t5.Entrada as Ent5, t5.Salida as Sal5,
t6.Entrada as Ent6, t6.Salida as Sal6

from T t1
left join T t2 on t1.IDLegajo=t2.IDLegajo and
t2.Entrada = (select min(Entrada) from T
where IDLegajo = t1.IDLegajo and
Entrada > t1.Entrada)
left join T t3 on t2.IDLegajo=t3.IDLegajo and
t3.Entrada = (select min(Entrada) from T
where IDLegajo = t2.IDLegajo and
Entrada > t2.Entrada)
left join T t4 on t3.IDLegajo=t4.IDLegajo and
t4.Entrada = (select min(Entrada) from T
where IDLegajo = t3.IDLegajo and
Entrada > t3.Entrada)
left join T t5 on t4.IDLegajo=t5.IDLegajo and
t5.Entrada = (select min(Entrada) from T
where IDLegajo = t4.IDLegajo and
Entrada > t4.Entrada)
left join T t6 on t5.IDLegajo=t6.IDLegajo and
t6.Entrada = (select min(Entrada) from T
where IDLegajo = t5.IDLegajo and
Entrada > t5.Entrada)
where
(select count(*)
from T
where IDLegajo = t1.IDLegajo and
Entrada < t1.Entrada) % 6 = 0

order by t1.IDLegajo,t1.Ent1

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Cristian Meneses
02/01/2008 - 16:50 | Informe spam
Carlos
Muchas gracias, como siempre mi fiel amigo lo haces todo bien. Quise
hacer algo similar pero no me daba mas la cabeza entre todo lo que he
tomado para estas fiestas. Un buen año y gracias nuevamente!
Saludos


Cristian Meneses
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
02/01/2008 - 16:56 | Informe spam
Hola Cristian,

On 2 jan, 16:50, Cristian Meneses wrote:
Carlos
Muchas gracias, como siempre mi fiel amigo lo haces todo bien. Quise
hacer algo similar pero no me daba mas la cabeza entre todo lo que he
tomado para estas fiestas.



Pues hay que tomar menos eh!!! :-)

Un buen año y gracias nuevamente!



Eso! Un feliz año para todos.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida