PDA

Ver la Versión Completa : problemas con union y group


zajoma
20-04-2008, 11:27:35
Hola a todos:

Trabajo en Delphi 7 y tablas paradox. Estoy intentando hacer la consulta que os describo más abajo. El problema es que si agrupo la consulta falla. La pregunta es cómo puedo agrupar el número de paquetes que se produce en cada turno por la fecha de producción. Os doy las gracias por adelantado.

un Saludo.

select FechaProd, Count(*) as Turno1, 0 as Turno2, 0 as Turno3 from paquetes
where ( HoraProd between '06:00' and '14:15' )
group by FechaProd
union
select FechaProd, 0 as Turno1, Count(*) as Turno2, 0 as Turno3 from paquetes
where ( HoraProd between '14:15' and '22:30' )
group by FechaProd
union
select FechaProd, 0 as Turno1, 0 as Turno2, Count(*) as Turno3 from paquetes
where ( HoraProd >= '22:30' ) and ( HoraProd < '06:00' )
group by FechaProd

kuan-yiu
21-04-2008, 09:14:22
¿Falla? ¿Qué falla? ¿Qué te dice exactamente? ¿O es que no da los resultados correctamente?

hecospina
21-04-2008, 15:32:06
Hola
Yo tenia unos problemas semejantes y el problema era el tipo de dato, cuando se utiliza union se debe tener un mismo tipo de dato para cada una de las columnas
si tu error era time mismash in expresion esto te ayudara, aunque el tipo de dato podria ser INT u el que tu prefieras


select FechaProd, CAST(Count(*) AS NUMERIC(12,2) as Turno1, CAST(0 AS NUMERIC(12,2) as Turno2, CAST(0 AS NUMERIC(12,2) as Turno3 from paquetes
where ( HoraProd between '06:00' and '14:15' )
group by FechaProd
union
select FechaProd, CAST(0 AS NUMERIC(12,2) as Turno1, CAST(Count(*) AS NUMERIC(12,2) as Turno2, cast(0 AS NUMERIC(12,2) as Turno3 from paquetes
where ( HoraProd between '14:15' and '22:30' )
group by FechaProd
union
select FechaProd, cast(0 AS NUMERIC(12,2) as Turno1, cast(0 AS NUMERIC(12,2) as Turno2, cast(Count(*) AS NUMERIC(12,2) as Turno3 from paquetes
where ( HoraProd >= '22:30' ) and ( HoraProd < '06:00' )
group by FechaProd


supongo que este SQL analiza la produccion del turno de la noche
select FechaProd, cast(0 AS NUMERIC(12,2) as Turno1, cast(0 AS NUMERIC(12,2) as Turno2, cast(Count(*) AS NUMERIC(12,2) as Turno3 from paquetes
where ( HoraProd >= '22:30' ) and ( HoraProd < '06:00' )
group by FechaProd

No se si te funcione com quieres el turno empieza en un dia y termina en otro !

Saludos

zajoma
24-04-2008, 11:27:47
Gracias esa era la solución y en cuanto al tercer turno también es cierto.