Klasa bazowa Expression nie pozwala na stosowanie agregacji. Jeśli zauważysz, twoja klauzula inaczej faktycznie zwraca NumberExpression. Wszystko, co musisz zrobić, to użyć tego typu zamiast wyrażenia. Więc Twój kod może stać się:
NumberExpression<Integer> sourceCases = qTable.source.
when(matchedValue1).then(new Integer(1)).
otherwise(new Integer(0));
NumberExpression<Integer> newAccountCases = qTable.isNew.
when(matchedValue2).then(new Integer(1)).
otherwise(new Integer(0));
return queryDslJdbcTemplate.queryForObject(sqlQuery,
new Mapping(qTable.filed1,
qTable.filed2,
qTable.id.count(),
sourceCases.sum(),
newAccountCases.sum());