Как насчет упаковки в подзапрос?
SELECT companyCode, companyDesc, plantCode,
cast(COLLECT(haulierCode) as varchar2_ntt) haulierCode,
cast(COLLECT(haulierName) as varchar2_ntt) haulierName
FROM (
SELECT
nvl(spicd.COMPANY_CODE,'') companyCode,
nvl(scc.COMPANY_DESCRIPTION,'') companyDesc,
nvl(spicd.PLANT_CODE,'') plantCode,
nvl(sh.HAULIER_CODE, 'UNKNOWN HAULIER CODE') haulierCode,
nvl(sh.haulier_name, 'UNKNOWN HAULIER NAME') haulierName
from
SAISTB_COMPANY_CODE scc,
SAISTB_PVE_INDV_CONTACT_DET spicd
left outer join SAISTB_VENDOR_HAULIER svh on
svh.COMPANY_CODE = spicd.COMPANY_CODE and
svh.PLANT_CODE = spicd.PLANT_CODE and
svh.VENDOR_CODE = spicd.VENDOR_CODE
left outer join SAISTB_HAULIER sh on
sh.HAULIER_CODE = svh.HAULIER_CODE
where
scc.COMPANY_CODE = spicd.COMPANY_CODE
and spicd.COMPANY_CODE like <<CompanyCode>>
and spicd.PLANT_CODE like <<PlantCode>>
group by
nvl(spicd.COMPANY_CODE,''),
nvl(scc.COMPANY_DESCRIPTION,''),
nvl(spicd.PLANT_CODE,''),
nvl(sh.HAULIER_CODE, 'UNKNOWN HAULIER CODE') haulierCode,
nvl(sh.haulier_name, 'UNKNOWN HAULIER NAME') haulierName
)
GROUP BY companyCode, companyDesc, plantCode
Внутренняя группа by выполняет "отдельную" операцию.