IT TIP

Oracle SQL의 맞춤 주문

itqueen 2020. 12. 14. 21:27
반응형

Oracle SQL의 맞춤 주문


통화를 기준으로 거래를 주문해야합니다. 그러나 USD가 항상 맨 위에 오도록하고 나머지는 asc로 주문해야하는 맞춤 주문을 구현해야합니다.

예 :

  • BHT
  • USD
  • MYR
  • JYP

다음과 같이 정렬되어야합니다.

  • USD
  • BHT
  • 엔화
  • MYR

이것을 처리하는 간단한 방법이 있습니까?


이것이 간단한 자격인지 모르겠다.

order by 
    case 
       when currency = 'USD' then 1 
       when currency = 'BHT' then 2
       when currency = 'JPY' then 3
       when currency = 'MYR' then 4
       else 5
    end

또는 조금 더 간결하지만 Oracle에만 해당됩니다.

order by decode(currency, 'USD', 1, 'BHT', 2, 'JPY', 3, 'MYR', 4, 5)

숫자를 사용하여 정렬 순서를 정의하는 위의 솔루션은 case / decode 표현식에서 언급되지 않은 통화를 자동으로 올바르게 정렬하지 않습니다.

USD를 맨 앞에두고 나머지는 신경 쓰지 않으려면 "생성 된"주문 기준도 문자 값이어야합니다. 이 경우 다음을 사용할 수 있습니다.

order by 
    case 
       when currency = 'USD' then '001' 
       else currency
    end

"알파벳순"순서를 사용합니다. 이것은 문자가 숫자 자릿수 뒤에 정렬되기 때문에 작동합니다. ( 'AAA'대신 사용하면 '001'작동합니다).


정렬이 "유연"하고 모든 통화에서 작동하는지 확인하려면 다음을 수행하십시오.

SELECT <columns>
FROM <tableName>
ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn

특정 값을 시작 또는 끝으로 정렬하는 데 관심이 있지만 해당 값을 그룹으로 정렬하는 경우이를 수행하는보다 자세한 방법 :

order by
  case when currency in ('USD', 'CAD') 
    then '000'||currency
  when currency in ('ZWD', 'HTG')
    then 'ZZZ'||currency
  else currency 
  end

그러면 USD와 CAD가 목록의 맨 위에 (정렬 됨), ZWD 및 HTG가 맨 아래에, 나머지는 그 사이에 정렬됩니다.


아마도 이것은 당신을 도울 것입니다 :

order by decode(currency, 'USD', 1, 2)

또는 사용 case

  order by 
      case 
        when currency = 'USD' then 1 
        else 2
      end

FIELD()MySQL의 함수와 같은 regexp를 사용하는 또 다른 변형 :

select
meas_code,
to_number(regexp_replace(meas_code, replace('(meas1,meas2,meas3)', ',', '|'), instr(replace('(meas1,meas2,meas3)', ',', '|'), meas_code))) ordr
from (select cast(column_value as varchar2(10)) as meas_code from xmltable('''meas1'',''meas2'',''meas3'''))
order by 2

다음을 수행 할 수 있습니다.

SELECT 
  * 
FROM
  yourtable
ORDER BY
  REPLACE(FIND_IN_SET(currency,'USD,BHT,JPY,MYR'),0,'Z')

나는 똑같이해야했지만 여러 열을 사용했으며 다음과 같은 간단한 추가를 통해 Grzegorz W의 대답이 가장 적합하다는 것을 알았습니다.

SELECT <columns>
FROM <tableName>
ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn, anotherColumn;

참고URL : https://stackoverflow.com/questions/13339589/custom-order-in-oracle-sql

반응형