programing

Oracle SQL에서의 커스텀 오더

padding 2023. 3. 19. 19:53
반응형

Oracle SQL에서의 커스텀 오더

통화 기준으로 거래 주문을 해야 합니다.단, 커스텀 오더를 실행해야 하기 때문에 USD는 항상 상위에 있고 나머지는 asc를 주문해야 합니다.

예를 들어 다음과 같습니다.

  • BHT
  • USD
  • 마루
  • JYP

다음과 같이 정렬해야 합니다.

  • USD
  • BHT
  • JPY
  • 마루

이 문제를 해결할 간단한 방법이 있나요?

이것이 다음과 같이 간단한지 여부를 알 수 없습니다.

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)

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

단순히 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

regexp like 함수를 가진 다른 변종 1개FIELD()MySQL:

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 table ORDER BY FIELD(column,"case 1","case 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

반응형