Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91498440
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-24 21:35:21

 
假如有数据库表table_a数据如下
 
int_id    num
11        3432
11        2343
11        4321
22        7865
22        6333
22        5432
 
 
想变成table_b

int_id    num
11        3432-2343-4321
22        7865-6333-5432
 
可以通过存储过程实现,其中int_id相同的记录不受限制
 

create procedure add_up(var_int_id integer)--定义传参
returning varchar(1000);
--返回合并后的值
define var_num lvarchar(1000);
--定义变量,尽量用lvarchar,因为varchar最多只能255个字符
define var_out lvarchar(1000);
--定义变量,尽量用lvarchar,因为varchar最多只能255个字符
let var_num='';
--赋初始值
let var_out='';
--赋初始值
foreach select num into var_num from table_a where int_id=var_int_id and num is not null
--将num的值以列表的形式放到var_num变量中,有多少个值就 循环多少次
let var_out=var_out||'-'||var_num;
--将num的值用-连接起来
end foreach;
return var_out;
--返回值
end procedure;
 
通过调用上面的函数add_up就可以达到目的,得到table_b的样子
select distinct int_id,add_up(int_id) from table_a
into temp table_b
阅读(573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~