-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
Case 문
20.10.01 17:36 작성 조회수 2.29k
4
OrderBy에도 사용 못하는건가요?
@Test
void complexCase() {
List<Member> result = queryFactory
.selectFrom(member)
.orderBy(new CaseBuilder()
.when(member.age.eq(10)).then(1)
.when(member.age.eq(20)).then(2)
.otherwise(3))
.fetch();
}
빨간줄이 막뜨더라구요..
답변을 작성해보세요.
6
김영한
지식공유자2020.10.02
안녕하세요. 별님
다음과 같이 작성하면 됩니다^^
@Test
void simpleCaseByOrderBy() {
NumberExpression<Integer> roleRankPath = new CaseBuilder()
.when(member.rolename.eq("ROLE_MASTER")).then(1)
.when(member.rolename.eq("ROLE_ADMIN")).then(2)
.otherwise(3);
List<Tuple> fetch = queryFactory
.select(
member.username,
member.rolename,
roleRankPath.as("roleRank")
)
.from(member)
.orderBy(roleRankPath.desc())
.fetch();
for (Tuple tuple : fetch) {
System.out.println("tuple.get(member.username) = " + tuple.get(member.username));
System.out.println("tuple.get(member.rolename) = " + tuple.get(member.rolename));
System.out.println("tuple.get(roleRankPath) = " + tuple.get(roleRankPath));
}
System.out.println("result = " + fetch);
}
도움이 되셨길 바래요^^
1
0
0
슬픈 두꺼비
질문자2020.10.01
ORDER BY (
CASE
WHEN ENABLE = 0 THEN 4
WHEN ROLENAME = 'ROLE_MASTER' THEN 1
WHEN ROLENAME = 'ROLE_ADMIN' THEN 2
WHEN ROLENAME = 'ROLE_USER' THEN 3
END
), REGDATE DESC
오라클로 만든 쿼리중 ORDER BY절입니다.
enable은 탈퇴유무이고 0은 탈퇴회원이라 가장 마지막에, 그다음은 마스터, 관리자, 일반회원순으로 정렬을 하려고 합니다.
0
김영한
지식공유자2020.10.01
안녕하세요. 별님
Case 관련 구문을 orderBy절에는 넣을 수 없습니다.
혹시 어떤 것을 하고 싶으신지 설명해주시면 제가 다른 방법을 찾아봐드릴께요^^
감사합니다.
답변 5