Java 使用JOOQ的带有两个字段的别名

Java 使用JOOQ的带有两个字段的别名,java,jooq,Java,Jooq,我有一个讨厌的SQl,我想在JOOQ中进行转换 以下是查询: 选择 SUMdpr.dpr_bruttopraemie_prt+dpr.dpr_sofortrabatt_prt ,MAXTO_NUMBERDP1.dp_wert 从deckungen甲板,deckungspraemien dpr, 选择dp.dp\u id,dp.dp\u wert 来自textbausteine txb,DruckDP参数 其中dp.dp_txb_id=txb.txb_id DP1 其中DP1.dp_id=:dru

我有一个讨厌的SQl,我想在JOOQ中进行转换

以下是查询:

选择 SUMdpr.dpr_bruttopraemie_prt+dpr.dpr_sofortrabatt_prt ,MAXTO_NUMBERDP1.dp_wert 从deckungen甲板,deckungspraemien dpr, 选择dp.dp\u id,dp.dp\u wert 来自textbausteine txb,DruckDP参数 其中dp.dp_txb_id=txb.txb_id DP1 其中DP1.dp_id=:druckparameter_id; 如您所见,我需要从带有两个字段的select中生成alias

dp.dp\U id,dp.dp\U wert 我会在其他地方使用它

我该怎么做

我见过

阿斯菲尔德先生 Funktion,但它只为一列生成别名

PS:实际的查询要复杂得多。所以我写了一个更简单的。
希望它能满足SQL ORACLE方言的要求。

我假设您使用的是代码生成器,因此您已经生成了可用于表的对象,如DECKUNGEN。我还假设您正在使用这些静态导入:

导入静态org.jooq.impl.DSL.*;//jooqapi 导入静态com.example.myapp.generated.Tables.*;//生成的表 然后你可以写:

Deckungen甲板=Deckungen.asdeck; Deckungspraemien dpr=Deckungspraemien.asdpr; Textbausteine txb=Textbausteine.astxb; Druckparameter dp=Druckparameter.asdp; 表dp1=表 选择DP.DP\u ID,DP.DP\u WERT .来自TXB,dp 。其中DP.DP_TXB_ID.eqtxb.TXB_ID .asdp1; 记录2结果= 使用配置 选择 sumdpr.DPR_bruttopraemi_PRT.plusdpr.DPR_SOFORTRABATT_PRT, maxfieldto_编号{0},BigDecimal.class,dp1.fielddp.DP_-WERT .fromdeck,dpr,dp1 .其中dp1.fielddp.DP_ID.eqdruckParameterd .1; 一些解释 jOOQ目前没有内置的TO_NUMBER函数,但是您可以使用类似的重载轻松地滚动自己的函数。欲了解更多详情, 使用运算符可以最容易地创建派生表。 派生表中的列可以使用table.field方法取消引用,尤其是,它尝试查找与参数字段同名的字段,并保留参数字段的类型信息。 旁注 我认为您的查询不正确,因为您只是在表deck、dpr和dp1之间创建笛卡尔乘积。具体来说,总和很可能是错误的,而MAX的计算效率很低