order by 절을 상황에 따라 바꾸고 싶습니다. 0 3 1,720

by 열심히 [SQL Query] [2013.11.27 15:52:29]


안녕하세요.
partition by 를 아래와 같이 사용하고 있습니다.
ROW_NUMBER() over(PARTITION BY 필드1, 필드2 ORDER BY 필드1, 필드2, 필드3) num

그런데 문제는 order by 가 상황에 따라서 바뀌어야 합니다..
예를 들어  case when flag = 'A' 일때는 order by 필드1, 필드2, 필드3 로
그 외 일때는 order by 필드3, 필드1, 필드2 로 설정하고 싶습니다.

위 문장에서 
ROW_NUMBER() over(
PARTITION BY 필드1, 필드2 ORDER BY CASE WHEN flag='A' then 필드1, 필드2, 필드3 ELSE 필드3, 필드1, 필드2 end) num
이렇게 사용하고 싶은데 
이런식으로 사용할수가 없는것 같습니다.
order by 에 case when then 문장에는 필드하나만 올 수 있나 봅니다.

저렇게 order by 를 할수 있는 방법은 없는지요 ?
by 마농 [2013.11.27 16:10:57]
어차피 PARTITION BY 필드1, 필드2 하셨기 때문에
ORDER BY 절의 필드1, 필드2 는 무의미한 코드입니다.
즉 빼도 된다는 거구요. 아니, 빼는게 좋다는거. 아니, 빼야만 한다는거.
결론은 필요한 정렬은 결국 flag 와 상관 없이 필드3 뿐인거네요.

by Oracler [2013.11.27 20:39:50]
ORDER BY CASE flag WHEN 'A' THEN 필드1 ELSE 필드3 END
    , CASE flag WHEN 'A' THEN 필드2 ELSE 필드1 END
    , CASE flag WHEN 'A' THEN 필드3 ELSE 필드2 END
위와 같이 변경하고 해보세요. 될지 안될지 보장은 못해요~ ^^

by Rt. [2013.11.28 10:17:31]
필드1,필드2가 partition으로 묶여있는데 필드1,필드2를 정렬할 필요가 있을까요?
같은 partition이면 필드1,필드2 값은 동일한 값이기때문에 정렬할 의미도 필요도 없습니다.

위 질문대로라면 구현한다해도 결과값은 동일할겁니다..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입