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

Ayuda con consulta JOIN

Estas en el tema de Ayuda con consulta JOIN en el foro de Mysql en Foros del Web. Hola. Resulta que tengo una tabla que se llama cuerpo_factura en ella tengo un campo que se llama precio_unitario. En otra tabla que se llama ...
  #1 (permalink)  
Antiguo 17/12/2009, 13:25
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Ayuda con consulta JOIN

Hola.
Resulta que tengo una tabla que se llama cuerpo_factura en ella tengo un campo que se llama precio_unitario. En otra tabla que se llama pie_guia_servicio tengo un campo que se llama valor_guia. Lo que neceisto hacer es que en la tabla cuerpo_factura el campo precio_unitario tenga el valor total de todas las guias de servicio de un contrato x y del mes X.
El problema es que nose "como llegar" a esa tabla pues entre ambas no estan relacionadas de manera directa solo por medio de otras tablas. Las relaciones es la siguiente:


Código PHP:
Ver original
  1. Tabla:pie_factura--------cuerpo_factura|-------encabezado_factura---cliente-------encabezado_guia_servicio-------cuerpo_guia_servicio----pie_guia_servicio-----
  2. pk----numero_factura|----numero_factura--------numero_factura-------rut_cliente---numero_guia_servicio-----------numero_guia_servicio----numero_guia_servicio--
  3. FK:----------------------id_contrato_cliente---rut_cliente----------id_ciudad-----rut_cliente/id_contrato_cliente---------------------------------------------------------------

Espero que se me alla entendido, aquí dejo mi consulta que llevo hasta ahora:

Código MySQL:
Ver original
  1.                 ef.numero_factura,
  2.                 ef.fecha_factura,
  3.                 CONCAT(c.rut_cliente,"-",c.dv_cliente),
  4.                 c.giro_cliente,
  5.                                 c.direccion_cliente,
  6.                 co.descripcion_comuna,
  7.                 ci.descripcion_ciudad,
  8.                 cf.linea_factura,
  9.                 cf.id_contrato_cliente,
  10.                 cf.cantidad,
  11.                 cf.precio_unitario,
  12.                 cc.resumen_contrato_cliente,
  13.                 pf.valor_neto,
  14.                 pf.valor_iva,
  15.                 pf.valor_bruto,
  16.                 pf.total_descuento
  17.  
  18.                         FROM encabezado_factura ef
  19.  
  20.                         INNER JOIN cuerpo_factura cf USING (numero_factura)
  21.                    INNER JOIN pie_factura pf USING (numero_factura)
  22.                    INNER JOIN cliente c USING (rut_cliente)
  23.                    LEFT JOIN contrato_cliente cc ON cc.id_contrato_cliente = cf.id_contrato_cliente
  24.                    LEFT JOIN comuna co ON co.id_comuna = c.id_comuna
  25.                    LEFT JOIN ciudad ci ON ci.id_ciudad = c.id_ciudad

En la linea 12 esta el campo que me tiene que tener el valor de las suma de todas las guias del contrato x y el mes x


Saludos y gracias
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"
  #2 (permalink)  
Antiguo 18/12/2009, 02:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda con consulta JOIN

Código MySQL:
Ver original
  1. Select sum(pg.valor_guia)
  2. from pie_guia_servicio pg
  3. where pg.id_contrato_cliente=cf.id_contrato_cliente
  4. and month(pg.fecha)=month(ef.fecha_factura)

si lo juntamos

Código MySQL:
Ver original
  1.     ef.numero_factura,
  2.     ef.fecha_factura,
  3.     CONCAT(c.rut_cliente,"-",c.dv_cliente),
  4.     c.giro_cliente,
  5.     c.direccion_cliente,
  6.     co.descripcion_comuna,
  7.     ci.descripcion_ciudad,
  8.     cf.linea_factura,
  9.     cf.id_contrato_cliente,
  10.     cf.cantidad,
  11.    (Select sum(pg.valor_guia)
  12.             from pie_guia_servicio pg
  13.             where pg.id_contrato_cliente=cf.id_contrato_cliente
  14.             and month(pg.fecha)=month(ef.fecha_factura)) as precio_unitario,
  15.     cc.resumen_contrato_cliente,
  16.     pf.valor_neto,
  17.     pf.valor_iva,
  18.     pf.valor_bruto,
  19.     pf.total_descuento
  20. FROM encabezado_factura ef
  21.           INNER JOIN cuerpo_factura cf USING (numero_factura)
  22.           INNER JOIN pie_factura pf USING (numero_factura)
  23.           INNER JOIN cliente c USING (rut_cliente)
  24.           LEFT JOIN contrato_cliente cc
  25.                    ON cc.id_contrato_cliente = cf.id_contrato_cliente
  26.           LEFT JOIN comuna co ON co.id_comuna = c.id_comuna
  27.           LEFT JOIN ciudad ci ON ci.id_ciudad = c.id_ciudad

Si la factura tiene fecha del mes siguiente deberas restar uno (cuidado con el mes de enero). He supuesto que pie_guia_servicio tiene una fecha... si no tendras que ver de donde la sacas....

No he repasado tu codigo solo he intentado interpretar lo que necessitabas....


Si funciona y quieres tendràs que transformar esta query (SELECT) a una query (UPDATE) que guarde la suma en la tabla....

Quim
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 00:30.