【问题标题】:Querydsl java order by custom input list通过自定义输入列表查询dsl java order
【发布时间】:2017-09-07 11:46:11
【问题描述】:

如何通过where clause IN values 中提供的自定义输入列表对结果集进行排序。

以下是我在 SQL 中对 oracle 的查询:

SELECT col1, col2, avg(col3)
FROM   table1
WHERE  table1.col1 IN (12340417, 12340418, 12340419, 12340420)
GROUP  BY col2, col1
ORDER  BY col2, instr('12340417, 12340418, 12340419, 12340420', col1) ;

所以,基本上我在 querydsl(传递给 OrderSpecifier 的表达式)中寻找上面 instr 表达式的替换,例如:

new OrderSpecifier(this.sortOrder, expression)

还有其他方法可以通过querydsl中的自定义列表(12340417, 12340418, 12340419, 12340420)对结果集进行排序吗?

【问题讨论】:

    标签: java sql oracle hibernate querydsl


    【解决方案1】:

    如果你用标准 SQL 来做,你可以使用 CASE 表达式:

    QUser user = new QUser("");
    List<String> guids = new ArrayList<>();
    guids.add("a");
    guids.add("b");
    guids.add("c");
    guids.add("d");
    
    CaseForEqBuilder<String>.Cases<Integer, NumberExpression<Integer>> cases = QUser.user.guid.when("").then(-1);
    for (int i = 0; i < guids.size(); i++) {
        cases.when(guids.get(i)).then(i);
    }
    NumberExpression<Integer> guidExpression = cases.otherwise(-1);
    
    QUser.user.guid.in(guids);
    guidExpression.asc();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      相关资源
      最近更新 更多