Ingres SQL在一列中选择多行

时间:2016-09-21 22:45:22

标签: sql ingres

我们的数据库位于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'选为一列,而不是为每个状态的三个副本结束。

我还没找到一个可行的选项。

非常感谢任何想法。

感谢。

1 个答案:

答案 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();