[SQL] 오라클에서 SQL 쿼리에서 연결할 결과
SQL오라클에서 SQL 쿼리에서 연결할 결과
나는 테이블에 같은 데이터가
NAME PRICE
A 2
B 3
C 5
D 9
E 5
나는 1 행의 모든 값을 표시 할; 예를 들면 :
A,2|B,3|C,5|D,9|E,5|
어떻게 나에게 오라클이 같은 문자열을 줄 것이다 쿼리를 만드는 방법에 대한 갈 것이라고? 나는 무언가로 프로그래밍 할 필요가 없습니다 난 그냥 방법은 내가 이상 복사하여 워드 문서에 붙여 넣을 수 있도록 결과에 표시하는 그 라인을 싶어.
내 오라클 버전은 10.2.0.5입니다.
해결법
-
==============================
1.- 오라클 10g -
- 오라클 10g -
SELECT deptno, WM_CONCAT(ename) AS employees FROM scott.emp GROUP BY deptno; Output: 10 CLARK,MILLER,KING 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD
-
==============================
2.나는이 조금 늦게 알고 있지만,이 시도 :
나는이 조금 늦게 알고 있지만,이 시도 :
SELECT LISTAGG(CONCAT(CONCAT(NAME,','),PRICE),'|') WITHIN GROUP (ORDER BY NAME) AS CONCATDATA FROM your_table
-
==============================
3.내가 빨리 그런 뭔가가 필요하고 내가 PL / SQL을 사용하지 않고 SQL에 있고 싶어 보통 때, 나는 아래의 해킹과 유사한 것을 사용 :
내가 빨리 그런 뭔가가 필요하고 내가 PL / SQL을 사용하지 않고 SQL에 있고 싶어 보통 때, 나는 아래의 해킹과 유사한 것을 사용 :
select sys_connect_by_path(col, ', ') as concat from ( select 'E' as col, 1 as seq from dual union select 'F', 2 from dual union select 'G', 3 from dual ) where seq = 3 start with seq = 1 connect by prior seq+1 = seq
그것은 아이에게 부모에서 "경로"를 얻기 위해 설계되었습니다 "sys_connect_by_path"특수 기능을 사용하는 계층 적 쿼리입니다.
우리가 서열 = 1 레코드가 서열과 레코드의 부모 인 것을 시뮬레이션되는 일을 = 2 등 네 번째, 그리고 마지막 자식의 전체 경로지고 (이 경우, 서열 = 3 기록)하는 효과적으로 "COL"열 모두의 연결이 될 것이다
귀하의 경우에 적응 :
select sys_connect_by_path(to_clob(col), '|') as concat from ( select name || ',' || price as col, rownum as seq, max(rownum) over (partition by 1) as max_seq from ( /* Simulating your table */ select 'A' as name, 2 as price from dual union select 'B' as name, 3 as price from dual union select 'C' as name, 5 as price from dual union select 'D' as name, 9 as price from dual union select 'E' as name, 5 as price from dual ) ) where seq = max_seq start with seq = 1 connect by prior seq+1 = seq
결과는 다음 | A, 2 | B, (3) | C 5 | D, 9 | E 5
-
==============================
4.당신이 오라클에있어 당신이 우수한 listagg을 사용할 수 없습니다 10G (). 그러나, 수많은 다른 문자열 집계 방법이 있습니다.
당신이 오라클에있어 당신이 우수한 listagg을 사용할 수 없습니다 10G (). 그러나, 수많은 다른 문자열 집계 방법이 있습니다.
모든 복잡한 것들에 대한 특별한 필요가 없습니다. 다음 표를 가정
create table a ( NAME varchar2(1), PRICE number); insert all into a values ('A', 2) into a values ('B', 3) into a values ('C', 5) into a values ('D', 9) into a values ('E', 5) select * from dual
지원되지 않는 기능 wm_concat 충분합니다 :
select replace(replace(wm_concat (name || '#' || price), ',', '|'), '#', ',') from a; REPLACE(REPLACE(WM_CONCAT(NAME||'#'||PRICE),',','|'),'#',',') -------------------------------------------------------------------------------- A,2|B,3|C,5|D,9|E,5
그러나, 당신은 또한 대체 기능없이 그것을 할, 또한 위의 링크에, 톰 카이트의 stragg을 변경할 수 있습니다.
-
==============================
5.여기에 또 다른 접근 방법은 모델 절을 사용한다 :
여기에 또 다른 접근 방법은 모델 절을 사용한다 :
-- sample of data from your question with t1(NAME1, PRICE) as( select 'A', 2 from dual union all select 'B', 3 from dual union all select 'C', 5 from dual union all select 'D', 9 from dual union all select 'E', 5 from dual ) -- the query select Res from (select name1 , price , rn , res from t1 model dimension by (row_number() over(order by name1) rn) measures (name1, price, cast(null as varchar2(101)) as res) (res[rn] order by rn desc = name1[cv()] || ',' || price[cv()] || '|' || res[cv() + 1]) ) where rn = 1
결과:
RES ---------------------- A,2|B,3|C,5|D,9|E,5|
SQLFiddle 예
-
==============================
6.SQL 바이올린에서 사용하는 오라클 11G : 여기 XMLAGG를 사용까지 얻을 수 있었다.
SQL 바이올린에서 사용하는 오라클 11G : 여기 XMLAGG를 사용까지 얻을 수 있었다.
데이터 테이블 :
COL1 COL2 COL3 1 0 0 1 1 1 2 0 0 3 0 0 3 1 0 SELECT RTRIM(REPLACE(REPLACE( XMLAgg(XMLElement("x", col1,',', col2, col3) ORDER BY col1), '<x>'), '</x>', '|')) AS COLS FROM ab ;
결과 :
COLS 1,00| 3,00| 2,00| 1,11| 3,10|
-
==============================
7.심하게 비효율적이고 안된 다음과 같은 뭔가.
심하게 비효율적이고 안된 다음과 같은 뭔가.
create function foo returning varchar2 as ( declare bar varchar2(8000) --arbitrary number CURSOR cur IS SELECT name,price from my_table LOOP FETCH cur INTO r; EXIT WHEN cur%NOTFOUND; bar:= r.name|| ',' ||r.price || '|' END LOOP; dbms_output.put_line(bar); return bar )
from https://stackoverflow.com/questions/14243131/concatenate-results-from-a-sql-query-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] "운영자가 존재하지 않습니다 : 정수 =?" 포스트 그레스를 사용하는 경우 (0) | 2020.04.16 |
---|---|
[SQL] 60000000 개 항목, 특정 월에서 항목을 선택합니다. 어떻게 데이터베이스를 최적화? (0) | 2020.04.16 |
[SQL] phpPgAdmin에서 PostgreSQL을 삽입 쿼리 구문 오류 (0) | 2020.04.16 |
[SQL] SQL Server의 문자열 CONCAT 필드 값 (0) | 2020.04.16 |
[SQL] 그룹 당 하나 개의 칼럼의 최대 값을 반환 행 [중복] (0) | 2020.04.16 |