여러 행을 한 행에 집약하는 Oracle SQL 쿼리가 있습니까?
다음과 같은 테이블이 있습니다.
A 1
A 2
B 1
B 2
그리고 다음과 같은 결과 세트를 만들고 싶습니다.
A 1 2
B 1 2
이를 수행할 SQL 문이 있습니까?Oracle을 사용하고 있습니다.
관련 질문:
- 한 줄에서 여러 줄 반환 내 질문은 이 질문과 반대입니다.
- LINQ를 사용하여 연결합니다.이것이 바로 제가 하고 싶은 일입니다만, LINQ는 사용하지 않습니다.
(경고 -WM_CONCAT
는 버전 12c에서 삭제된 지원되지 않는 기능입니다.오래된 데이터베이스를 사용하지 않는 한 이 기능은 사용하지 마십시오.사용하시는 것이 좋을 것 같습니다.LISTAGG
대신).
사용 중인 Oracle 버전에 따라 다릅니다.wm_concat() 함수를 지원하는 경우 다음과 같은 작업을 수행할 수 있습니다.
SELECT field1, wm_concat(field2) FROM YourTable GROUP BY field2;
wm_concat()는 기본적으로 MySQL의 group_concat()과 동일하게 동작합니다.문서화되어 있지 않을 수 있으므로 오래된 sqlplus를 기동하여 있는지 확인합니다.
존재하지 않는 경우는, 스스로 동등한 것을 실장할 필요가 있습니다.이 방법에 대한 몇 가지 절차는 oracle-base.com의 문자열 집약 페이지에서 확인할 수 있습니다.
꽤 오래된 토픽이지만 Oracle이 개선되었기 때문에 다른 사람에게 도움이 될 수 있습니다.
LISTAGG 기능은 당신이 원하는 것입니다(11g 이상).
인Oracle 10g+
:
SELECT *
FROM (
SELECT *
FROM mytable
MODEL
PARTITION BY
(grouper)
DIMENSION BY
(ROW_NUMBER() OVER (PARTITION BY grouper ORDER BY id) AS rn)
MEASURES
(val, val AS group_concat, 0 AS mark)
RULES SEQUENTIAL ORDER (
group_concat[rn > 1] ORDER BY rn = group_concat[CV() - 1] || ', ' || val[CV()],
mark[ANY] ORDER BY rn = PRESENTV(mark[CV() + 1], 0, 1)
)
)
WHERE mark = 1
ORDER BY
grouper
자세한 내용은 블로그에서 다음 기사를 참조하십시오.
다음과 같은 방법을 시도해 보십시오.
SELECT
field1,
RTRIM(REPLACE(REPLACE(XMLAgg(XMLElement("x", field2) ORDER BY field2), '<x>'), '</x>', ' ')) AS field2s
FROM yourTable
GROUP BY field1
이 Oracle 포럼에서 찾은 답변에서 자유롭게 영감을 얻습니다.
편집: 이 솔루션은 약 10개의5 행이 포함된 요청을 통해 매우 많은 리소스를 필요로 하는 것으로 입증되었습니다.John의 제안대로 커스텀 애그리게이트 기능으로 대체하게 되었습니다.
10g을 가지고 있는 경우는, 다음의 기능을 실행할 필요가 있습니다.
CREATE OR REPLACE FUNCTION get_separated_value (input_val in number)
RETURN VARCHAR2
IS
return_text VARCHAR2(10000) := NULL;
BEGIN
FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
return_text := return_text || ' ' || x.col2 ;
END LOOP;
RETURN return_text;
END;
/
다음과 같이 할 수 있습니다.
select col1, get_separated_value(col1) from table_name
oracle 11g이 있는 경우 listagg를 사용할 수 있습니다.
SELECT
age,
LISTAGG(name, ' ') WITHIN GROUP (ORDER BY name) "names"
FROM table_x
GROUP BY age
사용자 정의 집약 함수: http://www.adp-gmbh.ch/ora/sql/user_def_agg.html
복사/붙여넣기만 하면 됩니다.9i로 동작합니다.
SELECT a , COLLECT(b) FROM foo GROUP BY a
pl/sql에서 사용하는 경우 매우 유용합니다. 사용자 정의 컬렉션에 캐스팅할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1120706/is-there-an-oracle-sql-query-that-aggregates-multiple-rows-into-one-row
'programing' 카테고리의 다른 글
JSON API Wordpress에서 CORS 사용 (0) | 2023.03.13 |
---|---|
복잡하지만 "표준" 웹 앱에 php 프레임워크 대신 Wordpress를 사용하면 무엇을 잃게 됩니까?트레이드오프가 가치가 있을까요? (0) | 2023.03.13 |
Woocommerce에서 제품 이름 가져오기 (0) | 2023.03.13 |
각도(angular)를 사용하여 ng-module 내부의 htmlJS (0) | 2023.03.13 |
로그인 페이지로 각도 리다이렉트 (0) | 2023.03.13 |