programing

Oracle PL/SQL의 사용자 지정 순서

powerit 2023. 9. 5. 20:52
반응형

Oracle PL/SQL의 사용자 지정 순서

GRADE_DESCRIPTON 필드의 커스텀 순서인 'SENIOR DIRECTOR', 'DIRECTOR', 'MANAGER', 'EMPLOYE'에 대한 오라클 쿼리가 있습니다. 아래 쿼리를 사용합니다.

하지만 원하는 결과가 나오지 않습니다. 결과의 순서는 'SENIOR DIRECTOR', 'MANGER', 'DIRECTOR', 'EMPORYER'입니다.

SELECT DISTINCT GRADE_DESCRIPTION
      , HIRING_FORECATS.*  
FROM GRADE_MASTER left join     HIRING_FORECATS 
   ON (HIRING_FORECATS.GRADE = GRADE_MASTER.GRADE_DESCRIPTION 
        and HIRING_FORECATS.LOCATION = 'HO' )   
 order by decode    
 (GRADE_MASTER.GRADE_DESCRIPTION, 'SENIOR DIRECTOR', 'DIRECTOR', 'MANAGER', 'EMPLOYEE')

제안할 사항이 있습니까?

ORDER BY DECODE(
         GRADE_MASTER.GRADE_DESCRIPTION,
         'SENIOR DIRECTOR', 1,
         'DIRECTOR', 2,
         'MANAGER', 3,
         'EMPLOYEE', 4,
         5)

요점은decode()즉, 각 값 쌍에 대해 두 번째 값을 첫 번째 값으로 대체합니다.따라서 게시된 쿼리는 'SENIOR DIRECTOR'를 'DIRECTOR'로, 'MANGER'를 'EMPORYER'로, 그 이후에는 모두 랜덤으로 정렬합니다.

따라서 각 값에 정렬 순서를 지정해야 합니다.이 문제를 처리하는 가장 확실한 방법은 SORT_ORD 열을 GRADE_DESCRIPTION 테이블에 할당하는 것이지만, 항상 실용적인 것은 아닙니다.따라서 이러한 방식으로 정렬해야 하는 보고서가 하나 또는 두 개뿐인 경우(가능성이 높은 것으로 보임) 하드 코딩된 설명으로 계속 진행할 수 있습니다.

SELECT DISTINCT GRADE_DESCRIPTION
      , HIRING_FORECATS.*  
FROM GRADE_MASTER left join     HIRING_FORECATS 
   ON (HIRING_FORECATS.GRADE = GRADE_MASTER.GRADE_DESCRIPTION 
        and HIRING_FORECATS.LOCATION = 'HO' )   
 order by decode    
 (GRADE_MASTER.GRADE_DESCRIPTION
    , 'SENIOR DIRECTOR', 10
      , 'DIRECTOR', 20
      , 'MANAGER', 30
      , 'EMPLOYEE', 40
      , 100)

만약을 위해 기본값을 포함하는 것이 좋습니다.또한 새 값을 쉽게 입력할 수 있도록 정렬 번호에 큰 간격을 두는 것이 좋습니다.

PL/SQL DECODE 대신 SQL CASE를 사용해야 합니다.

order by CASE WHEN GRADE_MASTER.GRADE_DESCRIPTION = 'SENIOR DIRECTOR' THEN 1
          WHEN GRADE_MASTER.GRADE_DESCRIPTION = 'DIRECTOR' THEN 2
          WHEN GRADE_MASTER.GRADE_DESCRIPTION = 'MANAGER' THEN 3
          WHEN GRADE_MASTER.GRADE_DESCRIPTION = 'EMPLOYEE' THEN 4
          ELSE 5
      END

이렇게 하면 파서가 SQL 모드와 PL/SQL 모드 간에 전환되지 않습니다.

다음에 새 열을 추가할 수 있습니다.GRADE_MASTER순서 또는 수준을 나타냅니다.이렇게 하면 절별 주문을 다음으로 변경할 수 있습니다.

ORDER BY GRADE_MASTER.GRADE_ORDER

또한 변경만 필요로 하는 장점이 있습니다.GRADE_MASTER새로운 등급이 도입될 때 표.

언급URL : https://stackoverflow.com/questions/2809418/custom-order-in-oracle-pl-sql

반응형