Buenas.
Para probar, partí de la siguiente estructura:
Código SQL
[-]CREATE TABLE movimiento (
cuenta INTEGER,
tipo VARCHAR(1),
cantidad INTEGER,
articulo VARCHAR(1)
);
INSERT INTO movimiento VALUES (1, 'E', 3, 'X');
INSERT INTO movimiento VALUES (1, 'E', 7, 'X');
INSERT INTO movimiento VALUES (1, 'S', 5, 'X');
INSERT INTO movimiento VALUES (1, 'E', 6, 'Y');
INSERT INTO movimiento VALUES (1, 'S', 3, 'Y');
INSERT INTO movimiento VALUES (2, 'E', 4, 'X');
INSERT INTO movimiento VALUES (2, 'E', 4, 'X');
INSERT INTO movimiento VALUES (2, 'S', 3, 'X');
INSERT INTO movimiento VALUES (2, 'E', 5, 'Y');
INSERT INTO movimiento VALUES (2, 'S', 1, 'Y');
Solamente cambiando unos pequeños detalles a la original, para hacer más comprensibles las consultas.
No dice qué motor de base de datos está utilizando; así que con uno convencional, bastaría con algo como:
Código SQL
[-]SELECT
cuenta,
SUM(
CASE
WHEN tipo = 'S' THEN cantidad*(-1)
ELSE cantidad
END
) AS total
FROM movimiento
WHERE articulo = 'Y'
GROUP BY cuenta
Es decir, condicionando la suma según el valor de un campo, para que tome valores negativos o positivos.
Y ya. Se puede probar en ~
http://sqlfiddle.com/#!7/9d125/13
Pero, según sus mensajes anteriores sospecho que está utilizando Microsoft Access. Por lo que, averigüé
por ahí que ese software no soporta la sentencia CASE usada anteriormente.
Entonces, lo instalé en una máquina virtual desechable y aprendí a traducir a una consulta equivalente:
Código SQL
[-]SELECT
cuenta,
SUM(
SWITCH(
tipo = 'S', cantidad*(-1),
tipo = 'E', cantidad
)
) AS total
FROM movimiento
WHERE articulo = 'Y'
GROUP BY cuenta
En todo caso, es posible que obtenga los mismos resultados con un adefesio como:
Código SQL
[-]SELECT
a.cuenta,
((SELECT
SUM(b.cantidad)
FROM movimiento b
WHERE a.cuenta = b.cuenta
AND a.articulo = b.articulo
AND b.tipo = 'E') -
(SELECT
SUM(c.cantidad)
FROM movimiento c
WHERE a.cuenta = c.cuenta
AND a.articulo = c.articulo
AND c.tipo = 'S')) AS total
FROM movimiento a
WHERE a.articulo = 'Y'
GROUP BY a.cuenta, a.articulo
Que se podría llamar: la espeluznante franken-consulta. Pero, a cada quien con sus gustos.
-