如何通过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();

08-28 14:01