Ver Mensaje Individual
  #7 (permalink)  
Antiguo 31/05/2011, 09:30
razor7_996
 
Fecha de Ingreso: mayo-2011
Mensajes: 7
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Duplicados en consulta con INNER JOIN en misma tabla

Hola, intente de dos maneras y una funciono.

Primera Forma, funciona:
Código MySQL:
Ver original
  1. SELECT prod.Codigo
  2.      , FORMAT(pp1.Precio,2) AS PrecioGremio
  3.      , FORMAT(pp2.Precio,2) AS PrecioPublico
  4.      , IF(IFNULL((SELECT SUM(IF(psm.Tipo=0,psm.Cantidad,0)) - SUM(IF(psm.Tipo=1,psm.Cantidad,0))
  5.                   FROM productosstockmovimientos AS psm
  6.                   WHERE psm.IDProducto =  prod.RecID),0)>0,
  7.           IFNULL((SELECT SUM(IF(psm.Tipo=0,psm.Cantidad,0)) - SUM(IF(psm.Tipo=1,psm.Cantidad,0))
  8.                   FROM productosstockmovimientos AS psm
  9.                   WHERE psm.IDProducto =  prod.RecID),0),
  10.           0) AS Stock
  11. FROM productos AS prod
  12.   JOIN productosprecios AS pp1
  13.     ON prod.RecID = pp1.IDProducto
  14.     AND pp1.NroLista = 1
  15.   JOIN productosprecios AS pp2
  16.     ON prod.RecID = pp2.IDProducto
  17.     AND pp2.NroLista = 2
  18. WHERE prod.Inhabilitado = 0
  19. ORDER BY prod.Codigo ASC
Esta consulta me devuelve 0 si la sumatoria es NULL o menor que cero, y la sumatoria si la misma es mayor a cero.


Segunda Fomra, no funciona:
Código MySQL:
Ver original
  1. SELECT prod.Codigo
  2.      , FORMAT(pp1.Precio,2) AS PrecioGremio
  3.      , FORMAT(pp2.Precio,2) AS PrecioPublico
  4.      , (SELECT SUM(IF(IFNULL(IF(psm.Tipo=0,psm.Cantidad,0),0)>0,IF(psm.Tipo=0,psm.Cantidad,0),0)) -        SUM(IF(IFNULL(IF(psm.Tipo=1,psm.Cantidad,0),0)>0,IF(psm.Tipo=1,psm.Cantidad,0),0))
  5.                   FROM productosstockmovimientos AS psm
  6.                   WHERE psm.IDProducto =  prod.RecID
  7. ) AS Stock
  8. FROM productos AS prod
  9.   JOIN productosprecios AS pp1
  10.     ON prod.RecID = pp1.IDProducto
  11.     AND pp1.NroLista = 1
  12.   JOIN productosprecios AS pp2
  13.     ON prod.RecID = pp2.IDProducto
  14.     AND pp2.NroLista = 2
  15. WHERE prod.Inhabilitado = 0
  16. ORDER BY prod.Codigo ASC
Esta consulta me devuelve NULL y Menores que 0, es como si algo se anulara y me devuelve las cosas sin procesar.