Puede usar una variable para retener la cantidad acumulada:
SELECT ID,
@s := IF(ACTION_TYPE='ADD', @s + ACTION_QTY, @s - ACTION_QTY) AS BALANCE,
ACTION_QTY,
ACTION_TYPE
FROM tableA
CROSS JOIN (SELECT @s := 0) AS var
ORDER BY ID
La consulta anterior asume que solo hay dos tipos de ACTION_TYPE
valores, a saber, 'ADD'
y 'DEDUCT'
. Por lo tanto, si ACTION_TYPE
no es igual a 'ADD'
, entonces es igual a 'DEDUCT'
.