Das Problem ist, dass für die Summenfelder ggf. das Maximum als Zwischenergebnis verwendet wird, also Dec(31, 2).
Bei Dec(31, 2) / Dec(31, 2) gibt es leider zu wenig Nachkommastellen.
Wenn man allerdings weiß, dass die Summe nicht größer als 15 Stellen haben wird, ist es besser diese zu casten, also dec(sum(....), 15, 2).
Dann klappt es auch mit der Division. Vorteil: Double ist im Nachkommabereich relativ ungenau.

Nachtrag zur Performance:

case when sum(MENGE) != 0
then sum(EK*MENGE)/sum(MENGE)
end as EKPR

ersetzen durch:
sum(EK*MENGE)/nullif(sum(MENGE), 0) as EKPR