... das mit den ODPs beim Subselects ist eigentlich ein Dreckeffekt, aber die Group by lösung mit dem wegblenden der jeweils anderen Monaten durch ein case ist ohnehin eleganter. Den Join braucht man dann eigentlich auch nicht, da der Kunde ja in den group Feldern zur Verfügung steht.
Eine Bemerkung (zur dann ebenfalls obsoleten) CTE: das ist nur eine Formulierungshilfe für den Programmierer, die Query engine löst das normalerweise auf und berechnet den access plan neu orientiert an der Ergebnismenge (merkt man zuweilen an abbrechenden Queries wg. ungültiger Feldinhalte). Ich ziehe in den meisten Fällen eine View vor, das verbirgt (wo es geht) einen Teil der Komplexität.

D*B