Я бы просто использовал условную агрегацию:
SELECT TYPE_VEH,
AVG(CASE WHEN DEPARTMENT = 'D1' THEN 100.0 ELSE 0 END) as D1,
AVG(CASE WHEN DEPARTMENT = 'D2' THEN 100.0 ELSE 0 END) as D2
FROM (SELECT (CASE WHEN TYPE_V = 'N1' THEN 'CAR'
WHEN TYPE_INCIDENT IN ('N2', 'N3') THEN 'BUS'
END) AS TYPE_VEH,
DWH.*
FROM DWH
WHERE CODE = 'YES'
) D
GROUP BY TYPE_VEH;
Обычно вы хотите, чтобы это значение было числом . Но если вы хотите, чтобы он был отформатирован в виде строки, вы можете отобразить процентное время, используя || '%'
.