JOOQ Orderby with Case Statement

时间:2013-10-30 11:12:40

标签: java sql jooq

这是我的问题..

SelectQuery<Record> selectQuery  = transRefundFee.selectQuery();
selectQuery.addSelect(AccountBill.ACCOUNT_BILL.BILL_NUMBER,AccountBill.ACCOUNT_BILL.BILL_AMOUNT,AccountBill.ACCOUNT_BILL.TOTAL_PAID );
selectQuery.addFrom(AccountBill.ACCOUNT_BILL);
selectQuery.addConditions(AccountBill.ACCOUNT_BILL.FOLDER_RSN.eq(argFolderRSN));

我必须使用Case Statement添加orderby我们如何才能执行此操作我检查Here但是我的情况不适用于我添加的任何其他方式

selectQuery.addOrderBy( DSL.decode().when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0)),AccountBill.ACCOUNT_BILL.BILL_AMOUNT).then(AccountBill.ACCOUNT_BILL.BILL_AMOUNT) .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER));

但它的说法是The method then(TableField<AccountBillRecord,BigDecimal>) is undefined for the type CaseConditionStep<BigDecimal>

与以下代码相同

selectQueryFee.addOrderBy(DSL.decode().when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0))
                    .then(AccountBill.ACCOUNT_BILL.BILL_AMOUNT)
                    .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER)));
  

然后(TableField)方法未定义   对于类型条件

1 个答案:

答案 0 :(得分:2)

自jOOQ 3.2起,CASE表达式支持未实现when() ... then()结构,即没有then()个关键字。相反,写一下:

DSL.decode()
   .when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0)), 
         AccountBill.ACCOUNT_BILL.BILL_AMOUNT)
   .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER)

jOOQ路线图上有一个待处理的功能请求要求纠正此问题:#615