Základní třída Expression vám neumožňuje použít agregace. Pokud si všimnete, vaše klauzule jinak ve skutečnosti vrací NumberExpression. Vše, co musíte udělat, je použít tento typ místo Expression. Takže váš kód by se mohl stát:
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());