값이 콜론으로 구분 된 2067:2063:2068:2066
인 열이 있습니다. 이제 SQL 쿼리를 사용하여 선택 목록을 같은 순서로 정렬하려고합니다. SQL을 사용하여이 작업을 수행 할 수 있습니까? 나는 이드, 이름 등으로 주문을 알고 있지만 값 콜론으로 구분 된 것과는 다른 시나리오이다. 누군가가해야 할 일을 제안 할 수 있습니까?Oracle SQL에서 정렬을 위해 콜론으로 구분 된 열에 ORDER by를 사용하는 방법은 무엇입니까?
답변
필자가 이해하는 한, 콜론으로 구분 된 숫자 목록을 정렬하려고합니다. 이건 ... 뭐야? 에이펙스 셔틀 항목 또는 다중 선택 목록?
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>
예, Apex 셔틀입니다. –
OK; 그래서, 나는 당신의 질문에 대한 답을 게시 한 코드를 가지고 있습니까? – Littlefoot
데이터베이스는 실제로 문자열에 무엇이 있는지 상관하지 않으며, 문자열에 포함 된 내용에 관계없이 문자열별로 정렬합니다. 즉, 빈약 한 데이터베이스 디자인은 여러분에게 정말로 이상한 결과를 줄 것입니다.
예제와 같은 행이 있고 행이 2068:2064:2069:2067
인 경우 예제에 나열된 예제보다 내 예제가 올 것임을 분명히 알 수 있습니다. 덜 분명하게 2068:2064:2065:2066
은 예를 들어 보았지만 내 앞에옵니다. 좀 더 혼란스럽게도, 그 두 사람이 2069:2099
과 같은 것으로 주문하는 방법을 예측하는 것이 훨씬 더 어렵습니다.
사용 사례에 따라 올바른 동작이 무엇인지 말하기가 특히 쉽지 않습니다. 데이터베이스에는 실제로 이와 같은 listagg() 값이 포함되어서는 안됩니다. 개인적으로 데이터를 더 잘 저장하는 것이 좋습니다.
당신이 문자열 내에서 값의 순서를 변경하려는 의미 :
어쨌든,이 도움이 있는지 여부를 확인? – Jacobm001
예 주어진 예제와 동일하게 주문하려고합니다. 선택 목록의 ID입니다. –
괜찮은 예를 나열하지 않았습니다. 문자열 내의 ID 순서를 변경 하시겠습니까? 또는 해당 문자열을 기반으로 행의 순서를 변경 하시겠습니까? – Jacobm001