Я не знаю, как обстоят дела с T-SQL, но в целом в SQL то, что находится в предложении group by, должно точно соответствовать каждому столбцу неагрегированной функции в предложении select. Попробуйте
select CONVERT(varchar,cast(date as datetime),3)
from shoptransfer
where
SUBSTRING(productcode, 5, 3) like '%' group by CONVERT(varchar,cast(date as datetime),3)
также, where SUBSTRING(productcode, 5, 3) like '%'
не сильно отфильтровывает - возможно, удалите его.