Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Summe des Case Builder-Ausdrucks in QueryDSL

Der Basisklassenausdruck erlaubt Ihnen nicht, Aggregationen anzuwenden. Wie Sie bemerken, gibt Ihre else-Klausel tatsächlich NumberExpression zurück. Sie müssen lediglich diesen Typ anstelle von Ausdruck verwenden. Ihr Code könnte also folgendermaßen aussehen:

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