2016-09-21 3 views
0

데이터베이스가 Ingres II 10.0.0 (su9.us5/132)에 있습니다. 따라서 stuff, coalesce 등과 같이 여러 행의 데이터를 하나의 열로 병합하는 것을 매우 어렵게 만드는 유용한 기능이 빠져 있습니다.Ingres SQL에서 여러 행을 하나의 열로 선택

여기에이 있었지만 데이터가 구조화 된 방식으로는 해결할 수 없습니다.

본질적으로 참조 번호가있는 테이블이 있으며 여러 개의 상태가있는 각 행은 해당 참조 번호를 여러 번 포함 할 수 있습니다. 예를 들어

:
123 ABC
123 DEF
123 GHI
189 ABC
189 GHI

나는 하나의 select 문에 여러 테이블에서 데이터를 당겨있어,이 단지입니다 이후 데이터의 일부. 그래서 나는 그들이 가지고있는 각각의 지위에 대해 중복 된 사람의 세 줄로 끝나기보다는 예를 들어 'ABC', 'DEF', 'GHI'를 한 열로 선택하기를 원합니다.

나는 아직 작동 할 수있는 옵션을 찾고 있습니다.

모든 아이디어는 크게 감사하겠습니다.

감사합니다.

답변

0

행 생성 프로 시저를 사용하여이 작업을 수행 할 수 있어야한다고 생각합니다.

다음은 간단한 예입니다. 필요에 맞게 조정할 수 있습니다. 연결된 결과가 길어질 것으로 예상되는 경우 varchar의 최대 길이가 32000임을 잊지 마십시오.

create table myx(a integer not null, b char(3)); 
insert into myx values(123,'ABC'); 
insert into myx values(123,'DEF'); 
insert into myx values(123,'GHI'); 
insert into myx values(189,'ABC'); 
insert into myx values(189,'GHI'); 

create procedure myproc 
result row r(a integer not null, b varchar(1000))= 
declare aval=integer; 
     bval=varchar(1000); 
     newa=integer; 
     newb=char(3); 
begin 
    aval=NULL; 
    bval=''; 
    for select a,b into :newa, :newb from myx order by a,b 
    do 
    if :aval != :newa or :aval is null 
    then 
     if :aval is not null 
     then 
     return row(:aval, :bval); 
     endif; 
     aval = :newa; 
     bval = :newb; 
    else 
     bval=:bval+','+:newb; 
    endif; 
    endfor; 
    if :aval is not null 
    then 
    return row(:aval, :bval); 
    endif; 
end; 

select * from myproc(); 
관련 문제