Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/11/2009, 05:42
sencev
 
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 29
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Sumar o restar campos generados

Hola Quim, antes que nada muchas gracias por tu respuesta y tu tiempo.

Si bien el modelo de productos y ordenes lo puse de ejemplo para que se entendiese el problema, es mas complejo que eso.

en realidad no tengo productos, ni ordenes, sino caballos, embarques, liquidaciones, y alguans tablas mas relacionadas..

Gracias a tu ejemplo, entendi como hacer los Selects adentro de un LEFT, porque antes los hacia mal, y no me dejaba relacionar las tablas cuando hacia LEFT JOIN ( Select.. where id = TABLADEAFUERA.id ).. me decia que no existia TABLADEAFUERA, y tenia razon..

En fin, me volvi un poco loco pero lo pude resolver, Tenia que se de esta forma, porque usa la misma query (simplificada) para hacer la paginacion..

En un punto usando el select adentro del LEFT, pero para el otro ya era mucho quilombo porque esta todo agrupado, pero pude usar Having, la query quedo asi:

Código sql:
Ver original
  1. SELECT l.id
  2.        , cl.razon_social AS cliente_liquidador
  3.        , l.embarque_id
  4.        , Date_Format( e.fecha_salida, '%d/%m/%Y' ) AS fecha_salida
  5.        , p.nombre AS destino
  6.        , COUNT( c.id ) AS cantidad_caballos
  7.        , Group_Concat( DISTINCT r.nombre ORDER BY r.nombre Separator ', '  ) AS razas
  8.        , SUM( c.valor ) AS valor_caballos
  9.        , ( SUM( c.valor ) - ( ( SUM( c.valor ) * 9.0909 ) / 100 ) - l.gastos_total - l.iva_total ) AS total
  10.        , pagos.pagado
  11.        , ( ( SUM( c.valor ) - ( ( SUM( c.valor ) * 9.0909 ) / 100 ) - l.gastos_total - l.iva_total ) - pagos.pagado ) AS saldo
  12.       FROM liquidaciones l
  13. INNER JOIN embarques e
  14.         ON e.id = l.embarque_id
  15. INNER JOIN clientes cl
  16.         ON cl.id = l.cliente_liquidador_id
  17. INNER JOIN paises p
  18.         ON p.id = e.destino_aereo_id
  19.  LEFT JOIN ( SELECT ( SUM( importe_total ) - SUM( retencion_ganancia ) ) AS pagado, liquidacion_id FROM liquidaciones_pagos GROUP BY liquidacion_id ) AS pagos
  20.         ON pagos.liquidacion_id = l.id
  21.  LEFT JOIN liquidaciones_caballos lc
  22.         ON lc.liquidador_id = l.id
  23.  LEFT JOIN caballos c
  24.         ON c.id = lc.caballo_id
  25.  LEFT JOIN razas r
  26.         ON r.id = c.raza_id
  27.   GROUP BY l.id
  28.     HAVING saldo > 0 # Con saldo pendiente
  29.   # HAVING ( IsNull( saldo ) OR saldo <= 0 ) - Sin saldo pendiente

No me gusta mucho que se repita el ( Sum( c.valor ) - ( ( Sum( c.valor )... pero buen, ya fue xD

Ah, ahora que veo bien me parece que el Having me hubiese servido desde el primer momento,, lol

Saludos