Você não pode usar aliases definidos na cláusula SELECT para calcular outras colunas que também estão na mesma cláusula SELECT. Você tem pelo menos três opções:
-
Repita a subconsulta sempre que precisar usá-la. Isso tem a desvantagem de que você precisará repetir muito código. Como suas subconsultas são longas e complexas, essa é uma opção indesejável.
-
Use uma subconsulta e uma consulta externa.
SELECT *, (subtotal - payment) AS balance FROM ( SELECT ..., (...) AS subtotal, (...) AS payment FROM ... ) T1
-
Use um JOIN em vez de subseleções. Isso é um pouco mais complexo para sua situação, mas será melhor para o desempenho se você precisar buscar mais de uma linha.