当前位置: 首页 > 知识库问答 >
问题:

Querydsl:使用不同数量的when/then对构建case语句

尉迟清野
2023-03-14

在使用querydsl时,我遇到了一个问题,需要生成一个case语句,其中包含不同数量的when/then语句和一个最终的else表达式。

正如这里所描述的,我已经能够轻松地生成带有固定数量的when/then语句的case语句,如下所示-

Expression<String> cases = customer.annualSpending
    .when(10000).then("Premier")
    .when(5000).then("Gold")
    .when(2000).then("Silver")
    .otherwise("Bronze");
Map<BooleanBuilder,SimplePath<?>> caseExpressionMap = new LinkedHashMap<>();    
CaseBuilder.Cases<?,?> caseExpression = null;
for(BooleanBuilder expression : caseExpressionMap.keySet()){
  if(caseExpression!=null)
    caseExpression = caseExpression.when(expression).then(caseExpressionMap.get(expression));
 else
    caseExpression = new CaseBuilder().when(expression).then(caseExpressionMap.get(expression));
}
cases=cases.otherwise(...)

共有1个答案

胡昊
2023-03-14

更改CaseBuilder的泛型完成了这项工作。这个代码会起作用-

Map<BooleanBuilder,String> caseExpressionMap = new LinkedHashMap<>();
CaseBuilder.Cases<String,SimpleExpression<String>> cases = null;
for(BooleanBuilder expression : caseExpressionMap.keySet()){
  if(caseExpression!=null)
    caseExpression = caseExpression.when(expression).then(caseExpressionMap.get(expression));
 else
    caseExpression = new CaseBuilder().when(expression).then(caseExpressionMap.get(expression));
}
cases=cases.otherwise(...)
 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : MySQL更新案例帮助 (6个答案) 6年前关闭。 我正在尝试使用CLI脚本更新LARGE MyISAM表(2500万条记录)。该表没有被其他任何东西锁定/使用。 我想而不是对每个记录执行单个UPDATE查询,我不妨利用CASE功能。 该字段为PRIMARY。我怀疑以下查询应花费毫秒。 瞧,查询占用了CPU,并且永远无法完成。 然后,令我惊讶的是,我发现

  • 本文向大家介绍sql学习之CASE WHEN THEN ELSE END的用法,包括了sql学习之CASE WHEN THEN ELSE END的用法的使用技巧和注意事项,需要的朋友参考一下 超强:SQL命令中的case...when...then...else...end条件查询(不同于where) 与 类型转换的用法 case...when...then...else...end,是在from

  • 问题内容: 以下条件查询计算不同产品组的平均评分。 它生成以下SQL查询: 的结构取代值与,如果在指定的表达式子句进行评估以。 我需要在子句中使用相同的构造,以便可以通过用该构造所计算的值列表中的替换为来过滤由子句返回的行组。 因此,该子句应像 如果在方法中,可以给出代替,但是这是不可能的。这样做会生成一个编译时错误,指示和之间的类型不匹配。 那么,该子句中如何与该子句具有相同的结构? 我也尝试过

  • 问题内容: 在SQL Server 2005上,我正在尝试查询此选择语句 它返回下面的错误 消息156,级别15,状态1,第4行关键字“ IN”附近的语法错误。 请给我一些有关我的代码可能出问题的建议。 问题答案: 应该只是。 您正在混合表达式的2种形式。

  • 问题内容: 以下是我当前的SELECT CASE语句: 我并不总是想重复版本=’xxx’的条件,例如 在Excel中,这相当容易,但是如何在PostgreSQL中进行编译呢? 问题答案: 试试这个

  • 使用CASE WHEN 做条件的筛选,但是一直报错; 报错: ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio