복붙노트

[SQL] 오라클 SQL의 맞춤 주문

SQL

오라클 SQL의 맞춤 주문

나는 통화에 따라 주문 거래해야합니다. 그러나 나는 항상 상단에오고, 나머지는 오름차순을 주문해야하는 USD하게하여 사용자 정의 순서를 구현해야합니다.

예를 들어 :

같이 분류한다 :

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

해결법

  1. ==============================

    1.간단하게이 자격이 있는지 몰라 :

    간단하게이 자격이 있는지 몰라 :

    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
    

    또는 더 컴팩트하지만 오라클 특정 비트 :

    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
    

    어떤에 "알파벳"순서를 사용합니다. 문자가 숫자 숫자 후 분류되어 있기 때문에이 작동합니다. (대신에 '001'의 'AAA'를 사용하면 잘 작동).

  2. ==============================

    2.귀하의 종류가 "유연"이고 모든 통화는 이렇게 작동합니다 확인하십시오 :

    귀하의 종류가 "유연"이고 모든 통화는 이렇게 작동합니다 확인하십시오 :

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

    3.당신은 시작 또는 끝 부분에 특정 값을 정렬에 흥미 있지만, 자신의 그룹에 분류 사람들이있는 경우,이 일을 더 자세한 방법 :

    당신은 시작 또는 끝 부분에 특정 값을 정렬에 흥미 있지만, 자신의 그룹에 분류 사람들이있는 경우,이 일을 더 자세한 방법 :

    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을 (분류), 나머지는 그 사이에 분류.

  4. ==============================

    4.어쩌면 이것은 당신을 도울 것입니다 :

    어쩌면 이것은 당신을 도울 것입니다 :

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

    또는 케이스를 사용

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

    5.MySQL은 기능 분야 ()과 같은 정규 표현식으로 하나 더 변형 :

    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
    
  6. ==============================

    6.당신은 다음 작업을 수행 할 수 있습니다 :

    당신은 다음 작업을 수행 할 수 있습니다 :

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

    7.나는 그러나 여러 열, 동일한 작업을 수행하는 데 필요한, 다음과 같은 간단한 추가와 함께, 그르 W의 대답이위한 최선의 발견 :

    나는 그러나 여러 열, 동일한 작업을 수행하는 데 필요한, 다음과 같은 간단한 추가와 함께, 그르 W의 대답이위한 최선의 발견 :

    SELECT <columns>
    FROM <tableName>
    ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn, anotherColumn;
    
  8. from https://stackoverflow.com/questions/13339589/custom-order-in-oracle-sql by cc-by-sa and MIT license