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
 

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

Preguntas similares