Da sind gleich mehrere Fehler auf einmal:

Sobald Aggregate verwendet werden ist ein "group by" erforderlich.
Eine "derived Table" beginnt nicht mit einer eigenen Klammer und muss einen Namen bekommen.

Richtig ist also:

SELECT KNR, sum(Zahl1), sum(Zahl2)
FROM (
SELECT KNR, sum(0) as Zahl1, count(*) as Zahl2...
group by KNR
UNION ALL
SELECT KNR, count(*) as Zahl1, sum(0) as Zahl2...
group by KNR
) as MyTable
GROUP BY KNR