Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/06/2012, 21:18
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Obtener media en una consulta Mysql

Código MySQL:
Ver original
  1.     fecha,
  2.     docprovee,
  3.     proveedor,
  4.     SUM(IF(codigo <> 'IVA', costo_ent,0)) AS Neto,
  5.     SUM(IF(codigo = 'IVA',costo_ent,0)) AS Iva,
  6.     SUM(costo_ent) AS TotFact,
  7.     SUM((@IVA/@nETO)*100)  AS tasa
  8. FROM movprodu
  9.     td='EN'
  10.     AND tpd='ENT'
  11. GROUP BY docprovee, codictosal  
  12. ORDER BY proveedor, fecha ;
Esto te devuelve valores nulos por dos razones:
1) No se pueden usar los alias de las columnas en el mismo SELECT que las crea.
2) En MySQL Iva y @IVA no son la misma cosa. Uno es el alias que le pones a la columna, y la otra es una variable de usuario. Y como todas las variables de usuario se deben incializar o de lo contrario su valor es NULL, te está devolviendo NULL.

Ahora bien, yendo a tu problema, a mi entender te estás complicando demasiado. Sería mucho más sencillo que hicieras así:

Código MySQL:
Ver original
  1.         fecha,
  2.         docprovee,
  3.         proveedor,
  4.         Neto,
  5.         Iva,
  6.         TotFact,
  7.         SUM((IVA/NETO)*100)  Tasa
  8.     (SELECT
  9.         fecha,
  10.         docprovee,
  11.         proveedor,
  12.         SUM(IF(codigo <> 'IVA', costo_ent,0)) Neto,
  13.         SUM(IF(codigo = 'IVA',costo_ent,0)) Iva,
  14.         SUM(costo_ent) TotFact
  15.     FROM movprodu
  16.     WHERE
  17.         td='EN'
  18.         AND tpd='ENT'
  19.     GROUP BY docprovee, codictosal) T1
  20. ORDER BY proveedor, fecha ;
A veces, lo extenso, simplifica.

Un tip adicional: la cláusula AS es obsoleta. Ya ni siquiera el Oracle 8i la usaba (y va por la versión 12), porque se eliminó del ANSI-SQL hace años. Solamente se conserva por compatibilidad cuando usas motores de bases de datos extremadamente viejos y obsoletos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)