Try this :
SELECT TOP (3) a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) AS TOTAL_COST
FROM FDDC_T_D_INCIDENT AS a INNER JOIN
FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID =b.FINCIDENT_ID
WHERE (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
GROUP BY a.INCIDENT_ID, a.REFERENCE
ORDER BY TOTAL_COST DESC
You need to add ‘a.REFERENCE’ to the GROUP BY clause.
EDIT :
Please try this if you only want to GROUP BY ‘a.INCIDENT_ID’ :
SELECT INCIDENT_ID, REFERENCE, TOTAL_COST
FROM(
SELECT TOP (3) a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) AS TOTAL_COST
FROM FDDC_T_D_INCIDENT AS a INNER JOIN
FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID =b.FINCIDENT_ID
WHERE (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
GROUP BY a.INCIDENT_ID, a.REFERENCE
ORDER BY TOTAL_COST DESC
) AS T
GROUP BY INCIDENT_ID
Hope this helps.