Не можете да използвате псевдоними, които са дефинирани в клаузата SELECT, за да изчислите други колони, които също са в същата клауза SELECT. Имате поне три опции:
-
Повтаряйте подзаявката всеки път, когато трябва да я използвате. Това има недостатъка, че ще трябва да повтаряте много код. Тъй като вашите подзаявки са дълги и сложни, това е нежелана опция.
-
Използвайте подзаявка и външна заявка.
SELECT *, (subtotal - payment) AS balance FROM ( SELECT ..., (...) AS subtotal, (...) AS payment FROM ... ) T1
-
Използвайте JOIN вместо подселекции. Това е малко по-сложно за вашата ситуация, но ще бъде по-добре за производителността, ако някога се наложи да извлечете повече от един ред.