Hallo Rince

@Baldur
@Rince

wenn meine Brille was taugt, dann ist der Union unecht, was haltet
ihr von:
SELECT
B.TRFSCN, B.TRFSDT, A.KKHVCN, A.KKHPAL, A.KKHSTS,
B.TRFRCN, B.TRFRDT,
DECIMAL(SUM(C.KRTREC), 7, 0)
FROM KRTKOMH A INNER JOIN TRFHDR B ON A.KKHBCH = B.TRFBCH
where A.KKHPAL IN
(
select C.KRTKPL
from KRT001 C
where
C.KRTSTY = :STYLE
AND C.KRTCOL = :COLOUR
AND C.KRTSIZ = :SIZE
)
or
A.KKHPAL IN
(
select D.KRTKPL
from KRTHST D
where
C.KRTSTY = :STYLE
AND C.KRTCOL = :COLOUR
AND C.KRTSIZ = :SIZE
)
GROUP BY
B.TRFSCN, B.TRFSDT, A.KKHVCN, A.KKHPAL, A.KKHSTS,
B.TRFRCN, B.TRFRDT
soweit die erste Idee.

Union führt in Verbindung mit einigem zu full Tablescans, die dann logischerweise für den Group by einen temporären Index zur Folge haben. Meine Bedenken gehen allerdings in die Richtung, dass der WHERE IN auch nicht zu den Highlights von DB2/400 gehören.
Wenn das ganze signifikant für irgendwas ist, dann könnte man eventuell noch einen Filter als SQL UDF für die Bedingung auf C und D schreiben und für diesen Multithreading erlauben.

Dieter Bende