0

我们的数据库位于 Ingres II 10.0.0 (su9.us5/132) 上。因此,它缺少许多有用的功能,如填充、合并等,这些功能使得将多行数据合并到一列变得极其困难。

有这样的:如何在 Ingres 中进行 GROUP_CONCAT?但是对于我们的数据结构,这种解决方案是不可能的。

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

例如:
123 ABC
123 DEF
123 GHI
189 ABC
189 GHI

我正在将多个表中的数据提取到一个 select 语句中,这只是我所追求的数据的一部分。因此,我希望例如将“ABC”、“DEF”、“GHI”选择在一列中,而不是在他们拥有的每个状态下以三行重复的人结束。

我还没有找到可行的选择。

任何想法将不胜感激。

谢谢。

4

1 回答 1

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();
于 2016-09-23T09:03:25.017 回答