SQL分割(合并)保存

假如一个User表 字段

ID    name      description       part
1     张三          描述(部分1)       1
1     张三          描述(部分2)       2
2     李四          描述              1
3     王五          描述              1

ID和part作为联合主键,由于description 字段可能很长,超过了varchar(4000)的范围,所以这种情况会分成多个part存储,如张三,分成了两个部分。
现在需要一条select语句,需要取出后,如果字段是多个part,那么就合并,得到如下结果:

ID    name      description                      
1     张三         描述(part1和2合并的完整描述)         
2     李四         描述                               
3     王五         描述                              

实现SQL

select id, name, ltrim(sys_connect_by_path(description, ','), ',')
  from (select id,
               name,
               description,
               row_number() over(partition by id order by part) rn,
               count(*) over(partition by id) cnt
          from AAA -- 换成你的表名
        ) a
 where level = cnt
 start with rn = 1
connect by prior id = id
       and prior rn = rn - 1


select id,name,wm_syswm_concat(description) from table group by id,name 
select id,name,WMSYS.WM_CONCAT(description) from table group by id,name 
posted @ 2012-08-24 10:20  Mr-sniper  阅读(329)  评论(0编辑  收藏  举报