2014-10-17 2 views
1

다음 SQL 조회가 있습니다. 결과를 ,과 연결해야하며이 쿼리가 하나의 쿼리로 필요합니다.여러 행을 선택하십시오. 결과를 단일 행 문자열 결과로 선택하십시오.

Select LOCATION_CODE from LOCATION WHERE ZIPCODE = '555555'; 

위치 테이블

location_id | location_code | zipcode 
-------------------------------------------- 
     1  | ASDFSFD  | 555555  
     2  | OUIXVCX  | 555555 
     3  | 2KLJSDF  | 555555 
     14  | 887CSD  | 555555 

다음과 같은 결과를 필요 ... ASDFSFD,OUIXVCX,2KLJSDF,887CSD

답변

2
with location_code as (
select 'ASDFSFD' loc_code, 555555 zipcode from dual 
union all select 'OUIXVCX', 555555 from dual 
union all select '2KLJSDF', 555555 from dual 
union all select '887CSD', 555555 from dual 
) 
select rtrim (xmlagg (xmlelement (e, loc_code || ',')).extract ('//text()'), ',') 
from location_code where zipcode = 555555; 
+0

큰 이잖아. 그것은 매력처럼 일했습니다. – Zeus

+0

사용자 지정 구분 기호를 사용하려면 다음을 할 수 있습니다 :'rtrim (xmlagg (xmlelement (e, loc_code || '|')). 사용자 지정 구분 기호입니다. 다중 문자 구분 기호 (예 :'||')와 함께 작동하는 것으로 보입니다. 이것은 훌륭한 솔루션입니다. –

1

는 오라클 10g를 사용하는 경우, 당신은 또한 문서화되지 않은 집계 함수를 사용할 수 있습니다 WM_CONCAT() :

SELECT WM_CONCAT(location_code) FROM location WHERE zipcode = 555555; 

한 가지주의 할 점은 WM_CONCAT()이 Oracle 10g의 일부 버전 (예 : 10.2.0.5)에서는 CLOB를 반환하지만 다른 버전에서는 VARCHAR2 (예 : 10.2.0.1)가 CLOB를 반환한다는 것입니다.

고유 한 문자열 연결 집계 함수를 개발할 수도 있습니다. 세부 사항에 대한 다음 링크 (뿐만 아니라 문자열 연결을 수행하는 방법의 다른 방법)을 참조하십시오

http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php#wm_concat

+0

나는이 접근법을 아주 좋아한다. 나는 clob을 얻습니다. 그래서 to_char()를 사용하여 char로 변환합니다. – Zeus

+1

또한, 대신에 사용자 정의 구분 기호를 사용할 수있는 방법이 있습니까? 나는 여전히 링크에서 읽는 중이다. 아직까지는 찾지 못했다. – Zeus

+0

이것은'WM_CONCAT()'에서는 가능하지 않지만 여러분이 직접 커스텀 집계 함수 (링크에 포함되어있는 명령어)를 작성하면 가능합니다. 예를 들어, 멤버 함수 'ODCIAggregateIterate'를 보면 문자열이 쉼표 구분 기호로 연결된 곳을 볼 수 있고 해당 구분 기호를 사용자 정의 칸으로 바꿀 수 있습니다. 실제로 세 가지 멤버 함수가 업데이트된다는 것을 명심하십시오. –

관련 문제