查询列表条件

时间:2016-08-26 08:34:46

标签: java sql postgresql querydsl

这是我的代码:

final JPAQuery query = new JPAQuery(entityManager);
final List<Tuple> myList = query
                .from(QPerson.person)
                    .groupBy(QPerson.person.name)
                    .where(myBooleanExpression) //myBooleanExpression declared at the top of code              
                    .list(QPerson.person.name, 
                          QPerson.person.cash.sum());

我想要做的是列出:

  • 名称(无条件
  • 总和(现金)仅限(条件),ELSE(..)

有关如何操作的任何建议吗?

1 个答案:

答案 0 :(得分:1)

您可以在案例中使用SQL CASE,例如:

final JPAQuery query = new JPAQuery(entityManager);
final List<Tuple> myList = query
    .from(QPerson.person)
    .groupBy(QPerson.person.name)
    .where(myBooleanExpression)
    .list(QPerson.person.name, 
          new CaseBuilder()
              .when(yourOtherBooleanExpression).then(QPerson.person.cash.sum())
              .otherwise(yourOtherNumericExpressionOrLiteral));
  • yourOtherBooleanExpression应该是Predicate(例如BooleanExpression
  • yourOtherNumericExpressionOrLiteral应该是NumberExpression<T>T本身,其中TQPerson.person.cash的基本类型。