如何通过 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/