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

mas de 2 tablas y suma de datos

Estas en el tema de mas de 2 tablas y suma de datos en el foro de Mysql en Foros del Web. Que tal foros del web, soy nuevo en el foro y espero me puedan ayudar con esto: Quiero hacer un reporte de ventas general por ...
  #1 (permalink)  
Antiguo 04/05/2009, 11:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
mas de 2 tablas y suma de datos

Que tal foros del web, soy nuevo en el foro y espero me puedan ayudar con esto:

Quiero hacer un reporte de ventas general por vendedor. donde tengo dividido en 3 tablas: orden_descuento, venta_directa, venta_credito con el campo de pedido y vendedor.

Despues en otra tabala llamada articulos_venta tengo las caracteristicas de la venta, codigo del articulo, cantidad y numero_de_pedido

entonces si registro una venta, eje:

Vendedor: Pito Perez
Pedido #: 100
Tipo de vta: Venta directa

2 LPDC Lapiz de cera $2.00

Donde vendedor y # pedido se guarda en la tabla venta_directa y 2, LPDC y # Pedido se guarda en articulos_venta.

Primera duda: Como puedo hacer el select de las tres tablas.pedido donde solo me encuentre las del vendedor:
$usr = "Pito Perez"

Segunda duda: Como puedo sumar los articulos que coincidan eje2:

Vendedor: Pito Perez
Pedido #: 101
Tipo de vta: orden_descuento

1 LPDC Lapiz de cera $2.00

Agradecere mucho su ayuda.
  #2 (permalink)  
Antiguo 04/05/2009, 23:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: mas de 2 tablas y suma de datos

1) el campo por el que puedes relacionar es Pedido, pues imagino que estará en las tres tablas. Haz un inner join de esas tres tablas uniendo por pedido # y busca por vendedor.

2) agrupa por vendedor y por artículo y haz una suma.
  #3 (permalink)  
Antiguo 05/05/2009, 10:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: mas de 2 tablas y suma de datos

1) Gracias por responder jurena, pero como seria la centencia completa del sql?

$sql= "Select ?"

2) y como agruparia por articulo y vendedor?

Muchas gracias
  #4 (permalink)  
Antiguo 05/05/2009, 11:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: mas de 2 tablas y suma de datos

Dinos cuáles son los nombres de los campos de cada tabla y trataremos de ver cómo hacer el cruce

Última edición por jurena; 05/05/2009 a las 11:24
  #5 (permalink)  
Antiguo 05/05/2009, 12:41
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: mas de 2 tablas y suma de datos

Las tres tablas(orden_descuento, venta_directa, venta_credito) tienen estos campos en comun.

id
pedido
vendedor

y en la tabla (articulos_venta) tengo

id
numeropedido
codigo
cantidad

Las tablas (orden_descuento, venta_directa, venta_credito) las relaciono con (articulos_venta) por el numero de pedido

(articulos_venta) contiene la descripcion del la venta

Espero y no falten datos y muchas gracias
  #6 (permalink)  
Antiguo 06/05/2009, 01:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: mas de 2 tablas y suma de datos

Si he entendido bien, para la primera tienes que hacer union, puesto que los números de pedido serán diferentes en cada tabla, y no podremos relacionar por ellos.

Código sql:
Ver original
  1. SELECT vendedor, pedido, "orden_descuento" tipo_venta, av.codigo, av.cantidad FROM orden_descuento od
  2.   nner JOIN articulos_venta av ON od.pedido = av.numeropedido WHERE vendedor = "nombrevendedor"
  3. UNION ALL
  4. SELECT vendedor, pedido, "venta_directa",av.codigo, av.cantidad  FROM venta_directa vd
  5.   INNER JOIN articulos_venta av ON vd.pedido = av.numeropedido WHERE vendedor = "nombrevendedor"
  6. UNION ALL
  7. SELECT vendedor, pedido, "venta_credito", av.codigo, av.cantidad  FROM venta_credito vc
  8.   INNER JOIN articulos_venta av ON vc.pedido=av.numeropedido WHERE vendedor = "nombrevendedor"
Esta sería la primera.

Última edición por jurena; 06/05/2009 a las 01:18
  #7 (permalink)  
Antiguo 06/05/2009, 12:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
De acuerdo Respuesta: mas de 2 tablas y suma de datos

Buenisimo jurena !!!!! ; ya me arroja el resultado del select en un solo resultado.

Muchisimas gracias!!!!

Abusando de tu buena voluntad y tus conocimientos, como seria si lo quisiera filtrar por fecha de venta?, este campo esta en las tres tablas (orden_descuento, venta_directa, venta_credito) y se llama fechadevta

eje:Mostrar las ventas del 1 de mayo 09 al 7 de mayo 09

Muchisimas gracias por ayudarme!!!
  #8 (permalink)  
Antiguo 06/05/2009, 14:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: mas de 2 tablas y suma de datos

Código sql:
Ver original
  1. SELECT vendedor, pedido, "orden_descuento" tipo_venta, av.codigo, av.cantidad FROM orden_descuento od
  2.   nner JOIN articulos_venta av ON od.pedido = av.numeropedido WHERE vendedor = "nombrevendedor" AND fechadevta = '2009/05/01'
  3. UNION ALL
  4. SELECT vendedor, pedido, "venta_directa",av.codigo, av.cantidad  FROM venta_directa vd
  5.   INNER JOIN articulos_venta av ON vd.pedido = av.numeropedido WHERE vendedor = "nombrevendedor" AND fechadevta = '2009/05/01'
  6. UNION ALL
  7. SELECT vendedor, pedido, "venta_credito", av.codigo, av.cantidad  FROM venta_credito vc
  8.   INNER JOIN articulos_venta av ON vc.pedido=av.numeropedido WHERE vendedor = "nombrevendedor" AND fechadevta = '2009/05/01'
  #9 (permalink)  
Antiguo 06/05/2009, 15:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Que tal jurena escribo asi el codigo y me sale error

Código sql:
Ver original
  1. SELECT vendedor, pedido, "o_bc27500b3b3d8779d2f3efe353fc0f788502d9af" tipo_venta, av.codigo, av.cantidad, av.preciounit, av.preciotlt FROM o_bc27500b3b3d8779d2f3efe353fc0f788502d9af od
  2.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON od.pedido = av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta > '2009/3/3' AND fechadevta < '2009/3/7';
  3. UNION ALL
  4. SELECT vendedor, pedido, "vd_bc27500b3b3d8779d2f3efe353fc0f788502d9af",av.codigo, av.cantidad, av.preciounit, av.preciotlt  FROM vd_bc27500b3b3d8779d2f3efe353fc0f788502d9af vd
  5.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON vd.pedido = av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta > '2009/3/3' AND fechadevta < '2009/3/7';
  6. UNION ALL
  7. SELECT vendedor, pedido, "vt_bc27500b3b3d8779d2f3efe353fc0f788502d9af", av.codigo, av.cantidad, av.preciounit, av.preciotlt  FROM vt_bc27500b3b3d8779d2f3efe353fc0f788502d9af vc
  8.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON vc.pedido=av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta > '2009/3/3' AND fechadevta < '2009/3/7'

Ya lo resolvi, muchas gracias por todo jurena. con lo siguinte

Código sql:
Ver original
  1. SELECT vendedor, pedido, "o_bc27500b3b3d8779d2f3efe353fc0f788502d9af" tipo_venta, av.codigo, av.cantidad, av.preciounit, av.preciotlt FROM o_bc27500b3b3d8779d2f3efe353fc0f788502d9af od
  2.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON od.pedido = av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta >= '2009/3/2' AND fechadevta <= '2009/3/4'
  3. UNION ALL
  4. SELECT vendedor, pedido, "vd_bc27500b3b3d8779d2f3efe353fc0f788502d9af",av.codigo, av.cantidad, av.preciounit, av.preciotlt  FROM vd_bc27500b3b3d8779d2f3efe353fc0f788502d9af vd
  5.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON vd.pedido = av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta >= '2009/3/2' AND fechadevta <= '2009/3/4'
  6. UNION ALL
  7. SELECT vendedor, pedido, "vt_bc27500b3b3d8779d2f3efe353fc0f788502d9af", av.codigo, av.cantidad, av.preciounit, av.preciotlt  FROM vt_bc27500b3b3d8779d2f3efe353fc0f788502d9af vc
  8.   INNER JOIN ao_bc27500b3b3d8779d2f3efe353fc0f788502d9af av ON vc.pedido=av.numeropedido WHERE vendedor = "ALEJANDRO ALPIZAR ARCE" AND fechadevta >= '2009/3/2' AND fechadevta <= '2009/3/4'
Muchos Saludos y muchas gracias

Solo si me pudieras ayudar con lo ultimo, el resumen del reporte.

Eje.

1 LPZ LAPIZ DE CERA
1 CJA ESTUCHE DE LAPICES


RESUMEN DE VENTA

JORGITO VENDIO

15 LAPICES DEL
1 MAYO AL 5 DE MAYO
EN LOS PEDIDOS 100, 108, 11

MUCHAS GRACIAS POR TODO

Última edición por GatorV; 06/05/2009 a las 16:15
  #10 (permalink)  
Antiguo 07/05/2009, 14:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: mas de 2 tablas y suma de datos

Danielmm, amigo,
quiero decirte mi opinión sobre esto ahora, por si quieres cambiar algo, pues ahora es cuando puedes apreciar la naturaleza del problema. No resulta fácil, sino difícil, muy difícil (si es que realmente se puede en una consulta y sólo con la base), hacer esto con la estructura de tablas que tienes. Y tú dirás que ese tipo de consultas son muy frecuentes: sí, pero con una estructura de la base preparada para ello.
Si quieres una propuesta de solución, te diré que debes cambiar la estructura y hacer una sola tabla de pedidos en la que añadirás un campo para marcar orden_descuento, venta_directa y venta_credito, con por ej. 1, 2, 3, u O, D, C, lo que quieras. No te costará crear esta nueva tabla e importar los datos de las otras tres marcando el tercer campo desde la misma importación. El programa lo hará todo.
Luego te resultará sencillísimo hacer todo esto que quieres, e incluso lo anterior, sin recurrir a union.
La única duda que me queda es el significado de orden_descuento y si está al mismo nivel que venta_directa, venta_credito.
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 21:31.