Oracle7:将多个记录中的相同数据合并到一个记录中

Oracle7:将多个记录中的相同数据合并到一个记录中,oracle,merge,Oracle,Merge,我想将多个记录中相同的数据合并到一个记录中。 从 到 我知道它可以在SQLServer2008中使用,但我不知道它可以在oracle7中使用。 请帮帮我。谢谢。Oracle 7是该数据库的优秀版本。它引入了许多新特性,表现良好,显然它仍然非常稳定。但它的寿命很长,而且在最新版本的产品中缺少许多可用的功能 例如,我们可以用来将值聚合到列表中的所有常规技术都只能在9i或更高版本中使用。(有些可能在8i中工作,我的思维在这里有点模糊,因为我在甲骨文公司工作了将近十年) 那么您在Oracle 7中有什么

我想将多个记录中相同的数据合并到一个记录中。 从

我知道它可以在SQLServer2008中使用,但我不知道它可以在oracle7中使用。
请帮帮我。谢谢。

Oracle 7是该数据库的优秀版本。它引入了许多新特性,表现良好,显然它仍然非常稳定。但它的寿命很长,而且在最新版本的产品中缺少许多可用的功能

例如,我们可以用来将值聚合到列表中的所有常规技术都只能在9i或更高版本中使用。(有些可能在8i中工作,我的思维在这里有点模糊,因为我在甲骨文公司工作了将近十年)

那么您在Oracle 7中有什么选择吗?我能想到的唯一方法是在报告预处理过程中运行存储过程。此存储过程将围绕要查询的行循环,组装与所需输出匹配的行,然后将它们插入到不同的表中。然后,该表将为实际查询提供服务


这是一个非常笨拙的解决方法,在您的情况下可能不可行。但遗憾的是,这就是使用遗留软件的成本

Oracle 7是该数据库的完美版本。它引入了许多新特性,表现良好,显然它仍然非常稳定。但它的寿命很长,而且在最新版本的产品中缺少许多可用的功能

例如,我们可以用来将值聚合到列表中的所有常规技术都只能在9i或更高版本中使用。(有些可能在8i中工作,我的思维在这里有点模糊,因为我在甲骨文公司工作了将近十年)

那么您在Oracle 7中有什么选择吗?我能想到的唯一方法是在报告预处理过程中运行存储过程。此存储过程将围绕要查询的行循环,组装与所需输出匹配的行,然后将它们插入到不同的表中。然后,该表将为实际查询提供服务


这是一个非常笨拙的解决方法,在您的情况下可能不可行。但遗憾的是,这就是使用遗留软件的成本

正如APC所说,这个版本确实很旧,并且缺少用于进行字符串聚合的各种函数。不过,我在上一个千年使用过版本7,我认为下一个序列应该在Oracle7中使用。虽然我可能错了,但显然我无法检查

SQL> create table t (fo,line,floor,color,sum)
  2  as
  3  select 'S4714EH02', 'EH', '11F', 'AK', 9 from dual union all
  4  select 'S4714EH02', 'EH', '11F', 'AK', 18 from dual union all
  5  select 'S4714EH02', 'EH', '11F', 'FE', 9 from dual union all
  6  select 'S4714EH02', 'EH', '11F', 'FE', 18 from dual union all
  7  select 'S4714EH02', 'EH', '12F', 'AK', 9 from dual union all
  8  select 'S4714EH02', 'EH', '12F', 'AK', 18 from dual union all
  9  select 'S4714EH02', 'EH', '12F', 'FE', 9 from dual union all
 10  select 'S4714EH02', 'EH', '12F', 'FE', 18 from dual
 11  /

Table created.

SQL> create function f
  2  ( p_fo    in t.fo%type
  3  , p_line  in t.line%type
  4  , p_floor in t.floor%type
  5  , p_color in t.color%type
  6  ) return varchar2
  7  is
  8    cursor c
  9    is
 10    select t.sum
 11      from t
 12     where t.fo = p_fo
 13       and t.line = p_line
 14       and t.floor = p_floor
 15       and t.color = p_color
 16     order by t.sum
 17    ;
 18    l_concatenated_sum varchar2(2000);
 19  begin
 20    for r in c
 21    loop
 22      l_concatenated_sum := l_concatenated_sum || ',' || to_char(r.sum);
 23    end loop;
 24    return substr(l_concatenated_sum,2);
 25  end f;
 26  /

Function created.

SQL> select fo
  2       , line
  3       , floor
  4       , color
  5       , f(fo,line,floor,color) sum
  6    from t
  7   group by fo
  8       , line
  9       , floor
 10       , color
 11  /

FO        LI FLO CO SUM
--------- -- --- -- --------------------
S4714EH02 EH 11F AK 9,18
S4714EH02 EH 11F FE 9,18
S4714EH02 EH 12F AK 9,18
S4714EH02 EH 12F FE 9,18

4 rows selected.
问候,

Rob.

正如APC所说,这个版本确实很旧,并且缺少用于进行字符串聚合的各种函数。不过,我在上一个千年使用过版本7,我认为下一个序列应该在Oracle7中使用。虽然我可能错了,但显然我无法检查

SQL> create table t (fo,line,floor,color,sum)
  2  as
  3  select 'S4714EH02', 'EH', '11F', 'AK', 9 from dual union all
  4  select 'S4714EH02', 'EH', '11F', 'AK', 18 from dual union all
  5  select 'S4714EH02', 'EH', '11F', 'FE', 9 from dual union all
  6  select 'S4714EH02', 'EH', '11F', 'FE', 18 from dual union all
  7  select 'S4714EH02', 'EH', '12F', 'AK', 9 from dual union all
  8  select 'S4714EH02', 'EH', '12F', 'AK', 18 from dual union all
  9  select 'S4714EH02', 'EH', '12F', 'FE', 9 from dual union all
 10  select 'S4714EH02', 'EH', '12F', 'FE', 18 from dual
 11  /

Table created.

SQL> create function f
  2  ( p_fo    in t.fo%type
  3  , p_line  in t.line%type
  4  , p_floor in t.floor%type
  5  , p_color in t.color%type
  6  ) return varchar2
  7  is
  8    cursor c
  9    is
 10    select t.sum
 11      from t
 12     where t.fo = p_fo
 13       and t.line = p_line
 14       and t.floor = p_floor
 15       and t.color = p_color
 16     order by t.sum
 17    ;
 18    l_concatenated_sum varchar2(2000);
 19  begin
 20    for r in c
 21    loop
 22      l_concatenated_sum := l_concatenated_sum || ',' || to_char(r.sum);
 23    end loop;
 24    return substr(l_concatenated_sum,2);
 25  end f;
 26  /

Function created.

SQL> select fo
  2       , line
  3       , floor
  4       , color
  5       , f(fo,line,floor,color) sum
  6    from t
  7   group by fo
  8       , line
  9       , floor
 10       , color
 11  /

FO        LI FLO CO SUM
--------- -- --- -- --------------------
S4714EH02 EH 11F AK 9,18
S4714EH02 EH 11F FE 9,18
S4714EH02 EH 12F AK 9,18
S4714EH02 EH 12F FE 9,18

4 rows selected.
问候,

Rob.

在特殊情况下,每个不同的键只有两条记录(如示例数据所示),您可以执行以下操作:

SELECT fo, line, floor, color, MIN(sum) || ',' || MAX(sum)
  FROM theTable
  GROUP BY fo, line, floor, color;

但这不能概括为每个键处理两个以上的
sum

在每个不同键只有两个记录的特殊情况下(如示例数据所示),可以执行以下操作:

SELECT fo, line, floor, color, MIN(sum) || ',' || MAX(sum)
  FROM theTable
  GROUP BY fo, line, floor, color;

但是这不能被推广到处理每个键超过两个的
sum

Oracle7?真的没有办法升级吗?Oracle 7?真的没有办法升级吗?+1我忘了我们可以从Oracle 7中的SQL调用存储函数。事实上,这是一个老板释放+1我忘了我们可以从Oracle 7中的SQL调用存储函数。事实上,这是一个老板释放!