안녕하세요.. mybatis에서 if 다이나믹태그를 할까 하다가
아닌거 같아서 좋은 방법이 있나 여쭤봅니다.
상황이
ID / 명칭 / 중간,결과 / 진행,완료
1 / A / 중간 / 완료
2 / A / 결과 / 완료
3 / B / 중간 / 완료
4 / B / 결과 / 진행
5 / C / 중간 / 진행
6 / C / 결과 / 진행
이렇게 있다고 가정하면
제가 원하는 조회하고자 하는 데이터는
2 / A / 결과 / 완료
3 / B / 중간 / 완료
5 / C / 중간 / 진행
입니다.
즉,
중간 결과중에 우선순위가 진행이 아닌 완료이고
중간 결과중에 둘다 진행일 경우 결과가 아닌 중간에 진행을 뽑고자합니다.
이렇게 할경우 WHERE을 어떤식으로 해야할까요..
정말어렵습니다 ㅠㅠㅠ 도와주세요 선생님들
WITH t AS ( SELECT 1 id, 'A' nm, '중간' st1, '완료' st2 UNION ALL SELECT 2, 'A', '결과', '완료' UNION ALL SELECT 3, 'B', '중간', '완료' UNION ALL SELECT 4, 'B', '결과', '진행' UNION ALL SELECT 5, 'C', '중간', '진행' UNION ALL SELECT 6, 'C', '결과', '진행' ) SELECT * FROM (SELECT id, nm, st1, st2 , ROW_NUMBER() OVER(PARTITION BY nm ORDER BY st2 , CASE st2 WHEN '완료' THEN st1 END , CASE st2 WHEN '진행' THEN st1 END DESC ) rn FROM t ) a WHERE rn = 1 ;