Sub-Selects in der SELECT-Zeile (egal ob verschachtelt oder nicht) müssen genau einen Wert zurückbringen. In deinem Beispiel könnte es mehrere Werte geben, da nur auf MUVUVISTS verdichtet wird, die Verknüfung jedoch über MUVLGNR und nicht über (LNGR + UVISTS)

M.E. liegt hier schon mal ein Denkfehler

Ansonsten brauchst Du m.E. keine Verschachtelung: Der folgende einfache Sub-Select sollte das gleiche Ergebnis liefern:

Code:
select MUVUVISTS,
               count(*) * 100.0 / sum(count(*)) over(Partition By MUVLNGR) Prozent
              from MIETUVIP m
               where m.MUVLGNR         = l.LLGNR
              group by MUVUVISTS)
Ansonsten würde ich empfehlen die (verschachtelten) Sub-Selects durch Common Table Expressions zu ersetzten.Common Table Expressions

Die machen den Source Code nicht nur einfacher zu lesen, sondern auch einfacher zu analysieren ... und (zumindest nach meiner Erfahrung) kann der Query Optimizer CTEs besser optimieren als (verschachtelte) Sub-Selects.

Die folgende Abfrage sollte das Ergebnis liefern, dass du willst und hierbei macht es auch nichts aus, dass es pro MUVLGNR mehrere Sätze gibt.

Code:
With x as (Select MUVLGNR, MUVUVISTS, 
                  Count(*) * 100,0 / Sum(Count(*) 
                                     Over(Partition By MUVLGNR)) Prozent
             from MIETUVIP m
             Where MUVUVISTS in ('1', '3')
             Group By MUVLGNR, MUVUVISTS)
Select LLGNR, MUVUVISTS, Prozent
  from LIEGEP join x on LLGNR = MUVLLGNR;
Eventuell hätte man sogar ohne Common Table Expression auskommen können, indem man beide Dateien direkt verjoint und dann direkt auf LLGNR und MUVUISTS verdichtet.

Code:
Select LLGNR, MUVUVISTS,   
       Count(*) * 100,0 / Sum(Count(*) 
                          Over(Partition By MUVLGNR)) Prozent
   from LIEGEP join MIETUVIP m 
        on LLGNR = MUVLLGNR
   Where MUVUVUSTS in ('1', '3')
   Group By LLGNR, MUVUVISTS;