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