首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

db2 行数据 字符串合并 有关问题

2012-02-19 
db2 行数据 字符串合并 问题//组合单体//项目标识单体编号单体主键//1SJ123//1SJ456//1SJ789//1SC222//2SC

db2 行数据 字符串合并 问题
//组合单体
//项目标识单体编号单体主键
//1SJ 123
//1SJ456
//1SJ789
//1SC222
//2SC333


//最后输出的格式:
//项目标识串
//1SJ:123,456,789;SC:222;
//2:SC:333;

纯的sql语句, 非存储过程

[解决办法]
示例:
db2中关于递归(with)的使用

因为有人问及,这边简单的再探讨一下
-------------------
1.创建测试表
create table zxt_test
( id varchar(10),
ivalue varchar(20),
iname varchar(20)
)
commit;
-----------
2.插入测试语句
insert into zxt_test values('1','aa','x'),('2','bb','x'),('3','bb','x'),('1','bb','y'),('2','bb','y'),('3','bb','y');
commit;
---------------
3.查看数据
select * from zxt_test;
1 'aa' 'x'
2 'bb' 'x'
3 'bb' 'x'
1 'bb' 'y'
2 'bb' 'y'
3 'bb' 'y'
----------------
4.with 的写法!
with 
s as (
select row_number()over(partition by iname order by id) id1,
row_number()over(partition by iname order by id) id2,
ivalue,iname from zxt_test
)
,
t(iname,id1,id2,ivalue) as
(
select iname,id1,id2,cast(ivalue as varchar(100)) from s where id1 =1 and id2=1
union all 
select t.iname,t.id1+1,t.id2,cast(s.ivalue||','||t.ivalue as varchar(100)) 
from s, t 
where s.id2=t.id1+1 and t.iname = s.iname 
)
select iname,ivalue from t where t.id1= (select max(id1) from s where s.iname = t.iname);
5.结果如下:
'x' 'bb,bb,aa'
'y' 'bb,bb,bb'

[解决办法]
百度里:db2 with 递归

热点排行