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
'IT TIP' 카테고리의 다른 글
Jquery 가장 가까운 일치 요소 찾기 (0) | 2020.12.14 |
---|---|
패키지 복원과 관련된 Nuget 버전 관리 문제 (0) | 2020.12.14 |
Android 4.4에서 에뮬레이터 회전 불가능 (0) | 2020.12.14 |
sklearn을 사용하여 PCA에서 explain_variance_ratio_의 기능 이름 복구 (0) | 2020.12.14 |
Json.Net에서 PreserveReferencesHandling과 ReferenceLoopHandling의 차이점은 무엇입니까? (0) | 2020.12.14 |