多行并一行显示的两种方式(DB2)
发布时间:2020-12-15 23:28:28 所属栏目:百科 来源:网络整理
导读:一、简介 多行并作一行显示,在此介绍两种方式CTE递归,和XML函数。表数据如下: ID NAME HOUSE 1 张三 普通住宅 2 张三 豪华别墅 3 张三 安置房 4 李四 安置房 5 李四 普通住宅 要显示的结果大约为: NAME HOUSE 张三 普通住宅,豪华别墅,安置房 李四 安置房
一、简介多行并作一行显示,在此介绍两种方式CTE递归,和XML函数。表数据如下: ID NAME HOUSE 要显示的结果大约为: NAME HOUSE 二、CTE递归使用限制递归查询就是通过对 CTE 自身的引用,从而启动递归逻辑的查询。递归查询需要遵循以下几个规则 : 三、通过CTE递归方式--给数据加上序号 with wa_RowNum(id,name,house,rn) as( select id,ROW_NUMBER() OVER(PARTITION BY name) from TTABLE ),--CTE递归拼接house,序号最大的行拼接了所有的house数据 wa_addHouse(id,rn) as( --1作为递归入口 select wr.id,wr.name,CAST(wr.house AS CLOB),wr.rn from wa_RowNum wr where wr.rn=1 UNION ALL select nt.id,nt.name,CAST(self.house||';'||nt.house AS CLOB),self.rn+1 from wa_addHouse self,wa_RowNum nt where nt.name=self.name and self.rn+1=nt.rn ),--过滤掉不需要的数据 wa_getMax(name,house) as( select name,VARCHAR(house) from wa_addHouse wa where wa.rn in(select max(iwa.rn) from wa_addHouse iwa where iwa.name=wa.name) ) select * from wa_getMax /* 四、XML函数方式select * from wa_getMax; select name,varchar(replace(replace(replace(xml2clob(xmlagg(xmlelement(NAME a,house||','))),'<A>',''),'</A>','<A/>','')) from TTABLE group by name (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |