2017-12-22 28 views
0

값이 콜론으로 구분 된 2067:2063:2068:2066 인 열이 있습니다. 이제 SQL 쿼리를 사용하여 선택 목록을 같은 순서로 정렬하려고합니다. SQL을 사용하여이 작업을 수행 할 수 있습니까? 나는 이드, 이름 등으로 주문을 알고 있지만 값 콜론으로 구분 된 것과는 다른 시나리오이다. 누군가가해야 할 일을 제안 할 수 있습니까?Oracle SQL에서 정렬을 위해 콜론으로 구분 된 열에 ORDER by를 사용하는 방법은 무엇입니까?

+0

당신이 문자열 내에서 값의 순서를 변경하려는 의미 :

어쨌든,이 도움이 있는지 여부를 확인? – Jacobm001

+0

예 주어진 예제와 동일하게 주문하려고합니다. 선택 목록의 ID입니다. –

+1

괜찮은 예를 나열하지 않았습니다. 문자열 내의 ID 순서를 변경 하시겠습니까? 또는 해당 문자열을 기반으로 행의 순서를 변경 하시겠습니까? – Jacobm001

답변

1

필자가 이해하는 한, 콜론으로 구분 된 숫자 목록을 정렬하려고합니다. 이건 ... 뭐야? 에이펙스 셔틀 항목 또는 다중 선택 목록?

SQL> WITH test AS (SELECT '2067:2063:2068:2066' item FROM DUAL), 
    2  gimme_rows 
    3  AS ( SELECT REGEXP_SUBSTR (item, 
    4          '[^:]+', 
    5          1, 
    6          LEVEL) 
    7       res 
    8     FROM test 
    9   CONNECT BY LEVEL <= REGEXP_COUNT (item, ':') + 1) 
10 SELECT LISTAGG (res, ':') WITHIN GROUP (ORDER BY res) final_result 
11 FROM gimme_rows; 

FINAL_RESULT 
-------------------------------------------------------- 
2063:2066:2067:2068 

SQL> 
+0

예, Apex 셔틀입니다. –

+0

OK; 그래서, 나는 당신의 질문에 대한 답을 게시 한 코드를 가지고 있습니까? – Littlefoot

1

데이터베이스는 실제로 문자열에 무엇이 있는지 상관하지 않으며, 문자열에 포함 된 내용에 관계없이 문자열별로 정렬합니다. 즉, 빈약 한 데이터베이스 디자인은 여러분에게 정말로 이상한 결과를 줄 것입니다.

예제와 같은 행이 있고 행이 2068:2064:2069:2067 인 경우 예제에 나열된 예제보다 내 예제가 올 것임을 분명히 알 수 있습니다. 덜 분명하게 2068:2064:2065:2066은 예를 들어 보았지만 내 앞에옵니다. 좀 더 혼란스럽게도, 그 두 사람이 2069:2099과 같은 것으로 주문하는 방법을 예측하는 것이 훨씬 더 어렵습니다.

사용 사례에 따라 올바른 동작이 무엇인지 말하기가 특히 쉽지 않습니다. 데이터베이스에는 실제로 이와 같은 listagg() 값이 포함되어서는 안됩니다. 개인적으로 데이터를 더 잘 저장하는 것이 좋습니다.