Vous ne pouvez pas utiliser des alias définis dans la clause SELECT pour calculer d'autres colonnes qui se trouvent également dans la même clause SELECT. Vous avez au moins trois options :
-
Répétez la sous-requête chaque fois que vous devez l'utiliser. Cela a l'inconvénient que vous devrez répéter beaucoup de code. Étant donné que vos sous-requêtes sont longues et complexes, il s'agit d'une option indésirable.
-
Utilisez une sous-requête et une requête externe.
SELECT *, (subtotal - payment) AS balance FROM ( SELECT ..., (...) AS subtotal, (...) AS payment FROM ... ) T1
-
Utilisez un JOIN au lieu de sous-sélections. C'est légèrement plus complexe pour votre situation, mais ce sera mieux pour les performances si vous avez besoin de récupérer plus d'une ligne.