Ver Mensaje Individual
  #9 (permalink)  
Antiguo 19/08/2009, 12:21
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: resta de 2 campos

Por una cuestión de simplicidad de código, en lugar de poner nombres completos y arriesgarse a constantes errores de sintaxis, en SQL se usan ALIAS de las tablas usadas. Los alias se declaran poniendo un nombre adyacente ala denominación de la misma (tablas, bases o campos) o usando la cláusula AS (un poco obsoleta, ya no es mandatoria):

Código sql:
Ver original
  1. SELECT t.Campo1 AS a
  2. FROM Tabla2 AS t;
Código sql:
Ver original
  1. SELECT t.Campo1 a
  2. FROM Tabla2 t;

Estas dos dan el mismo resultado.

En cuanto al error, sería mejor que dijeras qué error te sale... como es tu base y tus datos, no se si el problema es de sintaxis o de datos, a menos que me lo digas.

Yendo a la lógica de lo hecho, la idea es:
Código sql:
Ver original
  1. SELECT
  2.       SUM(cantidad) total_apuntados,
  3.       id_producto,
  4.       vendedor,
  5.       eliminado
  6.    FROM apuntados,
  7.    WHERE
  8.       vendedor = colname
  9.       AND apuntados.eliminado='no'
  10.    GROUP BY id_producto
Esto debería devolver un listado de productos vendidos por el vendedor cuyo ID esté en la variable "colname" (tu tienes que poner ese valor, obviamente), sumando la cantidad en una columna que se llamará "total_apuntados", la cual contendrá también el id_producto y se agruparán por él.
Esto:
Código sql:
Ver original
  1. SELECT
  2.    p.id_producto,
  3.    (p.cantidad - t.total_apuntados) saldo_productos,
  4.    t.eliminado,
  5.    t.vendedor
  6. FROM productos p INNER JOIN
  7.    () T  USING(id_producto)
  8. ORDER BY id_producto;
Tomará la tabla productos y devolverá un listado de todos los productos que figuren en la subconsulta, entregando en la columna denominada "saldo_productos" la resta de la existencia menos lo vendido. Como la subconsulta genera una tabla derivada (una tabla en memoria), debe llevar un alias. De allí la "T" después de los paréntesis.
No sirve hacer un JOIN simple entre las dos tablas, porque entonces el proceso cruzará todos los datos antes de sumar los registros que únicamente pertenezcan a ese vendedor, lo cual es ineficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)