Das schon, aber "Spaltengenerierung" gehört da weniger dazu.
Man muss (leider) immer die Spalten für die Tabelle vorher wissen um eine Abfrage auszuführen.
Der SQL-Server stellt dafür eine Reihe von SP's (stored Procedures) zur Verfügung um Spalten dynamisch zu erfinden.
Der Suchbegriff ist "Pivot" bzw. "unpivot", weil man letztendlich eine Pivot-Tabelle erstellt.

Dein SQL kannst du ja (in php dynmaisch) so zusammenbauen:

select BApool, max(POBEZ), JAHR
,sum(case when Monat = 1 then Betrag else null) "2001/01"
,sum(case when Monat = 2 then Betrag else null) "2001/02"
,sum(case when Monat = 3 then Betrag else null) "2001/03"
,sum(case when Monat = 4 then Betrag else null) "2001/04"
from BAsisdaten, pool, Geldeingang
where GEkey1
=BAkey1 AND
BApool = popool
group by BApool
, jahr
order by 1
, 2, 3


Sowas lässt sich auch in einer SP dann als "dynmaische Tabelle" per Execute und return Cursor zusammenstoppeln.