如何通过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)
还有其他方法可以按
(12340417, 12340418, 12340419, 12340420)
中的自定义列表querydsl
对结果集进行排序吗? 最佳答案
如果在标准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();