2016-09-21 77 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();