[SQL] 어떻게 여러 행이 저장 프로 시저를 생성하지 않고 오라클의 하나로 연결될 수있다? [복제]
SQL어떻게 여러 행이 저장 프로 시저를 생성하지 않고 오라클의 하나로 연결될 수있다? [복제]
어떻게 저장 프로 시저를 생성하지 않고 오라클에 다음을 달성 할 수 있습니까?
데이터 세트:
question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12
원하는 결과 :
question_id element_id
1 7,8
2 9
3 10,11,12
해결법
-
==============================
1.이 문자열 집계를 할 수있는 많은 방법이 있지만 가장 쉬운 방법은 사용자 정의 함수입니다. 기능을 필요로하지 않는 방식이보십시오. 참고로, 기능없이 간단한 방법이 없습니다.
이 문자열 집계를 할 수있는 많은 방법이 있지만 가장 쉬운 방법은 사용자 정의 함수입니다. 기능을 필요로하지 않는 방식이보십시오. 참고로, 기능없이 간단한 방법이 없습니다.
이는 사용자 기능을 갖지 최단 경로이다 (이것은 ROW_NUMBER () 및 SYS_CONNECT_BY_PATH 함수를 사용)
SELECT questionid, LTRIM(MAX(SYS_CONNECT_BY_PATH(elementid,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements FROM (SELECT questionid, elementid, ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) AS curr, ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) -1 AS prev FROM emp) GROUP BY questionid CONNECT BY prev = PRIOR curr AND questionid = PRIOR questionid START WITH curr = 1;
-
==============================
2.오라클 11gR2에서, LISTAGG 절은 트릭을 수행해야합니다
오라클 11gR2에서, LISTAGG 절은 트릭을 수행해야합니다
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
결과 문자열은 (예를 들면, VARCHAR2에 대한 4000 개 이상의 문자) 너무 큰 경우주의 : 버전 12cR2에서, 우리는이 문제를 다루는 ON OVERFLOW TRUNCATE / ERROR를 사용할 수 있습니다.
-
==============================
3.쉬운:
쉬운:
SELECT question_id, wm_concat(element_id) as elements FROM questions GROUP BY question_id;
개인적으로 10g 테스트 ;-)
http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php에서
-
==============================
4.이 OTN - 스레드 성능 비교를 포함하는 문자열 집계를 할 수있는 몇 가지 방법을 포함 : http://forums.oracle.com/forums/message.jspa?messageID=1819487#1819487
이 OTN - 스레드 성능 비교를 포함하는 문자열 집계를 할 수있는 몇 가지 방법을 포함 : http://forums.oracle.com/forums/message.jspa?messageID=1819487#1819487
from https://stackoverflow.com/questions/1076011/how-can-multiple-rows-be-concatenated-into-one-in-oracle-without-creating-a-stor by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SSIS 패키지를 실행합니다 내 SQL Server 에이전트 작업에서 단계를 만들려면 어떻게해야합니까? (0) | 2020.04.01 |
---|---|
[SQL] SQL에서 두 날짜 사이의 전체 개월 수를 계산 (0) | 2020.04.01 |
[SQL] 덮여 지수는 무엇입니까? (0) | 2020.04.01 |
[SQL] (SQL 문) 마지막으로 삽입 된 행의 ID를 가져옵니다 [중복] (0) | 2020.04.01 |
[SQL] 밀리 초 단위로 오라클이 타임 스탬프의 차이를 계산 (0) | 2020.04.01 |