2016-09-21 75 views
0

我们的数据库位于Ingres II 10.0.0(su9.us5/132)。因此,它缺少许多有用的功能,如东西,合并等,这使得将多行数据合并成一列非常困难。Ingres SQL选择多行为一列

有这样的:How to GROUP_CONCAT in Ingres?但这种解决方案不可能与我们的数据结构。

基本上有一个表有一个参考号码,如果它们有多个状态,每一行可以多次包含该参考号。

例如:
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();