java - Querydsl java按自定义输入列表排序

标签 java sql oracle hibernate querydsl

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

下面是我在 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 中上面的 instr 表达式的替换(传递给 OrderSpecifier 的表达式),例如:

new OrderSpecifier(this.sortOrder, expression)

是否有其他方法可以在 querydsl 中按自定义列表 (12340417, 12340418, 12340419, 12340420) 对结果集进行排序?

最佳答案

如果您使用标准 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();

关于java - Querydsl java按自定义输入列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356934/

相关文章:

sql - 如何正确地从 PostgreSQL 中的子查询中获取多列?

sql - 将行转换为 Oracle 10g 中的列

mysql - 选择 2 周/天的时间戳间隔

sql - 没有选择行的oracle表中的行锁定

java - 如何将Eclipse中的tomcat配置迁移到Intellij Idea?

java - Jersey :请求资源不可用

java - 将 GWT SQL 示例部署到 AppEngine,在数据库上记录错误

sql - Oracle sql 从重复项中查找单行

c++ - php 中的 Oci 比 occi 快得多吗?

java - 如何移动一个点并打印新位置?