Nie można używać aliasów zdefiniowanych w klauzuli SELECT do obliczania innych kolumn, które również znajdują się w tej samej klauzuli SELECT. Masz co najmniej trzy opcje:
-
Powtórz podzapytanie za każdym razem, gdy musisz go użyć. Ma to tę wadę, że będziesz musiał powtórzyć dużo kodu. Ponieważ Twoje podzapytania są długie i złożone, jest to niepożądana opcja.
-
Użyj podzapytania i zapytania zewnętrznego.
SELECT *, (subtotal - payment) AS balance FROM ( SELECT ..., (...) AS subtotal, (...) AS payment FROM ... ) T1
-
Użyj JOIN zamiast podselekcji. Jest to nieco bardziej skomplikowane w Twojej sytuacji, ale będzie lepsze dla wydajności, jeśli kiedykolwiek będziesz musiał pobrać więcej niż jeden wiersz.