2016-07-13 1 views
0

나는 몇 가지 예를 들어 데이터를 다음과 같은 4 열이있는 테이블이오라클 주문 - 기반 기능

Aisle | Rack | Level | Position 
    1  1  1   1 
    1  2  1   2 
    2  1  1   1 
    2  2  1   1 
    2  3  1   1 
    3  1  1   1 
    3  2  1   1 

나는 다음과 같은 사용하여 레코드를 정렬 할 수있는 단일 쿼리를 작성하고자하는이

  • 첫 번째 통로 (오름차순) 랙에 의해 다음
  • 에 의해 (그래서 다음에 대해 내림차순 하나의 통로 및 에 대한 오름차순... 이 내가 ou는 알 수없는 것 일부입니다 이 오라클)에서 달성 할 수있는 경우

    Aisle | Rack | Level | Position 
        1  1  1   1 
        1  2  1   2 
        2  3  1   1 
        2  2  1   1 
        2  1  1   1 
        3  1  1   1 
        3  2  1   1 
    

    을 다음과 같이 t는

  • 그런 다음 레벨 (오름차순) 위치로 다음
  • (오름차순)에 의해

그래서 결과 명령 행이 될 것입니다 Oracle에서이를 달성 할 수 있습니까?

답변

3

할일과 통로를 식별 할 수 있도록 통로를 나열해야합니다. dense_rank() 함수는이 작업을 수행하며 order by 절에 허용됩니다. 그래서

는 : aisle가 틈이 없을 경우

order by aisle, 
     (case when mod(dense_rank() over (order by aisle), 2) = 1 
       then rack else - rack 
      end), 
     level, position 

사실, 당신은 또한 사용할 수 있습니다

order by aisle, 
     (case when mod(aisle, 2) = 1 
       then rack else - rack 
      end), 
     level, position 
+0

감사합니다. 그것은 유망 해 보인다. 한 가지주의 사항 만 있습니다. 홀수 (또는 심지어) 번호가 매겨진 통로 만 작업 할 수도 있습니다. 따라서 대체 통로는 랙의 오름차순 및 내림차순을 따라야합니다. 달성 될 수 있을까요? – Guddu

+1

확인. 방금 dense_rank를 공부했고 대답이 적합합니다 :-) 고든 고마워요. – Guddu

+0

쿼리를 실행하면 "ORA-01722 : number is invalid"오류가 발생합니다. 열은 모두 VARCHAR2 유형입니다. 작동하도록하려면 어떻게해야합니까? 도와주세요. – Guddu