我们的数据库位于Ingres II 10.0.0(su9.us5 / 132)。因此,它缺少许多有用的函数,如stuff,coalesce等,这使得将多行数据合并到一列非常困难。
有这样的:How to GROUP_CONCAT in Ingres?但是我们的数据结构不可能解决这个问题。
基本上有一个表有一个参考号,如果它们有多个状态,每行可以多次包含该参考号。
例如:
123 ABC
123 DEF
123 GHI
189 ABC
189 GHI
我将数据从多个表中提取到一个select语句中,这只是我追求的数据的一部分。所以我希望将'ABC','DEF','GHI'选为一列,而不是为每个状态的三个副本结束。
我还没找到一个可行的选项。
非常感谢任何想法。
感谢。
答案 0 :(得分: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();