Hola,
aquí tienes una posible solución que funcionaría (no lo he comprobado) en Oracle y PostgreSQL sin problemas:
Código SQL
[-]SELECT CLV_ART,
SUM(CASE WHEN TIPO_MOV = 51 THEN CANT ELSE CANT*-1 END) FROM MINV01
WHERE TIPO_MOV IN (51,2,4)
AND (CLV_ART LIKE "15%") OR (CLV_ART LIKE "29%")
AND FECHA_DOCU >= '09/01/2009' AND FECHA_DOCU <= '09/30/2009'
GROUP BY CLV_ART
Aunque no dices que base de datos/versión estás utilizando.