Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

consulta en varias tablas misma informacion

Estas en el tema de consulta en varias tablas misma informacion en el foro de Oracle en Foros del Web. saludos amigos... Tengo un pequeño inconveniente en la empresa que laboro necesitan conocer transacciones realizadas por los vendedores para los diferentes productos que tiene la ...
  #1 (permalink)  
Antiguo 17/01/2011, 09:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta consulta en varias tablas misma informacion

saludos amigos...
Tengo un pequeño inconveniente en la empresa que laboro necesitan conocer transacciones realizadas por los vendedores para los diferentes productos que tiene la empresa, bàsicamente cada producto sube sobre una tabla diferente el problema es que los campos tiene nombre diferente, por ejemplo en uno el vendedor se identifica como cod_vendedor y en otra tabla se identifica como asesor por lo tanto la consulta que he lanzado ha sido la siguiente:

select cod_vendedor , fecha,cod_oficina,sum(total_pagado),
sum (CASE WHEN (hora between '06:00:00' and '07:00:00' ) THEN total_pagado else 0 end ) as "6 a 7",
sum (CASE WHEN (hora between '07:00:01' and '08:00:00' ) THEN total_pagado else 0 end ) as "7 a 8"
from producto1 where fecha BETWEEN to_date(:fecha_INI,'dd-mm-yyyy') AND to_date(:fecha_FIN,'dd-mm-yyyy')
and hora between :hora1 and :hora2
AND COD_STATUS='I'
group by cod_vendedor, fecha,cod_oficina
order by cod_oficina, fecha,cod_vendedor asc

aclaro que por motivos de extension no le agrege toddas las horas laborales de la empresa, preo la funcion sum se extiende hasta las 22 y la parte hora between :hora1 and :hora2 premite escoger un rango en ese horario laborado

como tenemos seis productos diferentes tendria que sacar la misma consulta con los nombres de los respectivos campos seis veces y como lo que le interesa a la parte comercial es conocer productividad de los vendedores, mas no si se vende cierto producto en cierta hora, necesitaria poder consultar todas las tablas con los mismos campos aunque con nombres distintos en los campos, es algo asi como una especie de union all solo que no puedo hacer el group by debido a la diferencia de los nombres en los campos, aca pego la segunda consulta de otro producto con los nombres de los campos.

select cod_asesor, fecha_solicitud,cod_oficina,sum(valor_recarga) ,
sum (CASE WHEN (hora_solicitud between '06:00:00' and '07:00:00' ) THEN valor else '0' end ) as "6 a 7",
sum (CASE WHEN (hora_solicitud between '07:00:01' and '08:00:00' ) THEN valor else '0' end ) as "7 a 8
from com_mensaje_recarga where fecha_solicitud BETWEEN to_date(:fecha_solicitud_INI,'dd-mm-yyyy')
AND to_date(:fecha_solicitud_FIN,'dd-mm-yyyy')and hora_solicitud between :hora_solicitud1 and :hora_solicitud2
AND CODIGO_RESPUESTA='000'
group by cod_asesor, fecha_solicitud,cod_oficina
order by cod_oficina, fecha_solicitud,cod_asesor asc

No se si fui lo suficientemente claro, basicamente necesito la misma informacion de diferentes tablas con diferentes nombres en sus campos

Última edición por juanorozco; 17/01/2011 a las 09:46
  #2 (permalink)  
Antiguo 17/01/2011, 10:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta en varias tablas misma informacion

Para esto puedes hacer uso de union all combinado con subconsultas.

En un ejemplo sencillo, esto lo puedes hacer:

Código SQL:
Ver original
  1. SELECT
  2.  tabla_resultante.campo1,
  3.  SUM(tabla_resultante.campo2)
  4. FROM
  5. (
  6.  SELECT campo1,campo2 FROM tabla1
  7.   UNION ALL
  8.  SELECT campo3,campo4 FROM tabla2
  9. ) tabla_resultante
  10. GROUP BY tabla_resultante.campo1;

Aplicalo a tu problema y de seguro te funciona.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/01/2011, 17:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: consulta en varias tablas misma informacion

muchas gracias lo probare y te cuento...
  #4 (permalink)  
Antiguo 18/01/2011, 18:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: consulta en varias tablas misma informacion

excelentisimo hermano me funciono superbien, lo unico es que como los campos a pesar que representan lo mismo tienen nombres diferentes (ej: cod_vendedor y asesor) solo es necesario agregarle un as para que lo interprete como un mismo campo el union all de verdad que le agradezco mucho la colaboracion me ha hecho entender mejor el objetivo de las subconsultas anexo la consulta para aquellos que visiten el foro y tengan una duda similar

SELECT tabla_resultante.cod_vendedor , tabla_resultante.fecha,tabla_resultante.cod_oficin a,
sum (CASE WHEN (hora between '07:00:01' and '08:00:00' ) THEN total_pagado else 0 end ) as "7 a 8",
sum (CASE WHEN (hora between '08:00:01' and '09:00:00' ) THEN total_pagado else 0 end ) as "8 a 9",
sum (CASE WHEN (hora between '09:00:01' and '10:00:00' ) THEN total_pagado else 0 end ) as "9 a 10",
sum (CASE WHEN (hora between '10:00:01' and '11:00:00' ) THEN total_pagado else 0 end ) as "10 a 11",
sum (CASE WHEN (hora between '11:00:01' and '12:00:00' ) THEN total_pagado else 0 end ) as "11 a 12",
sum (CASE WHEN (hora between '12:00:01' and '13:00:00' ) THEN total_pagado else 0 end ) as "12 a 13",
sum (CASE WHEN (hora between '13:00:01' and '14:00:00' ) THEN total_pagado else 0 end ) as "13 a 14",
sum (CASE WHEN (hora between '14:00:01' and '15:00:00' ) THEN total_pagado else 0 end ) as "14 a 15",
sum (CASE WHEN (hora between '15:00:01' and '16:00:00' ) THEN total_pagado else 0 end ) as "15 a 16",
sum (CASE WHEN (hora between '16:00:01' and '17:00:00' ) THEN total_pagado else 0 end ) as "16 a 17",
sum (CASE WHEN (hora between '17:00:01' and '18:00:00' ) THEN total_pagado else 0 end ) as "17 a 18",
sum (CASE WHEN (hora between '18:00:01' and '19:00:00' ) THEN total_pagado else 0 end ) as "18 a 19",
sum (CASE WHEN (hora between '19:00:01' and '20:00:00' ) THEN total_pagado else 0 end ) as "19 a 20",
sum (CASE WHEN (hora between '20:00:01' and '21:00:00' ) THEN total_pagado else 0 end ) as "20 a 21",
sum (CASE WHEN (hora between '21:00:01' and '22:00:00' ) THEN total_pagado else 0 end ) as "21 a 22"
FROM
( SELECT cod_vendedor , fecha,cod_oficina,hora,total_pagado,cod_status FROM maestro_prod1
UNION ALL
SELECT cod_vendedor , fecha,cod_oficina,hora,total_pagado,cod_status FROM maestro_prod2
UNION ALL
SELECT ASESOR as cod_vendedor , fecha,oficina as cod_oficina,hora,valor as total_pagado,estado as cod_status
FROM rf_ventas_prod3
UNION ALL
SELECT cod_ASESOR as cod_vendedor , fecha,cod_oficina,hora,valor as total_pagado,estatus as cod_status FROM factura_esp)
tabla_resultante
where fecha BETWEEN to_date(:fecha_INI,'dd-mm-yyyy') AND to_date(:fecha_FIN,'dd-mm-yyyy')
and hora between :hora1 and :hora2
AND COD_STATUS='I'
GROUP BY tabla_resultante.cod_vendedor , tabla_resultante.fecha,tabla_resultante.cod_oficin a;

Etiquetas: diferentes, nombres, reporte, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:32.