Ich würde auch mal ganz lapidar sagen, dass 24 unabhängige SELECTs das Ganze auch nicht unbedingt performanter machen.
Dabei werden im Gegensatz zu der UDF (alle 24 Werte als String in einer Spalte) auch 24 einzelne Spalten generiert.
Ist das so gewollt?
Anstatt 24 einzelnen Sub-SELECTS würde ich es mit einer einzigen Common Table Expression oder einem einzigen Sub-Select in der FROM-Anweisung versuchen.

Code:
Select P1.adKto,
         Sum(Case When Monat = 201301 Then Coalesce(IST, 0) else 0),
         Sum(Case When Monat = 201302 Then Coalesce(IST, 0) else 0),
         Sum(Case When Monat = 201303 Then Coalesce(IST, 0) else 0),
         ...
From SOE01/ADR01PF p1 Left outer Join
    (Select Knd, Sum(Ist) Ist
        from Planz
        Group By Knd) x on p1.adkto = Knd
Where ....
Group by P1.ADKTO 
Order By P1.ADKTO;
oder

Code:
With x as (Select Knd, Sum(Ist)
          From Planz
          Group By Knd)
Select P1.adKto,
         Sum(Case When Monat = 201301 Then Coalesce(IST, 0) else 0),
         Sum(Case When Monat = 201302 Then Coalesce(IST, 0) else 0),
         Sum(Case When Monat = 201303 Then Coalesce(IST, 0) else 0),
         ...
From SOE01/ADR01PF p1 Left outer Join on P1.ADKTO = KND
Where ....
Group By P1.ADKTo
Order By P1.ADKTO;
Birgitta