Mysql
 sql >> Base de données >  >> RDS >> Mysql

Somme de l'expression Case Builder dans QueryDSL

La classe de base Expression ne vous permet pas d'appliquer des agrégations. Si vous remarquez, votre clause else renvoie en fait NumberExpression. Tout ce que vous avez à faire est d'utiliser ce type au lieu d'Expression. Ainsi, votre code pourrait devenir :

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());