多行并一行显示的两种方式(DB2)
生活随笔
收集整理的這篇文章主要介紹了
多行并一行显示的两种方式(DB2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
一、簡介
多行并作一行顯示,在此介紹兩種方式CTE遞歸,和XML函數。表數據如下:
ID NAME ?HOUSE
1 張三 普通住宅
2 張三 豪華別墅
3 張三 安置房
4 李四 安置房
5 李四 普通住宅
要顯示的結果大約為:
NAME HOUSE
張三 普通住宅,豪華別墅,安置房
李四 安置房,普通住宅
二、CTE遞歸使用限制
遞歸查詢就是通過對 CTE 自身的引用,從而啟動遞歸邏輯的查詢。遞歸查詢需要遵循以下幾個規則 :
遞歸查詢和初始查詢結果必須包含相同數量的數據列;
遞歸查詢和初始查詢結果數據列的、長度等必須一致;
遞歸查詢不能包含?GROUP?BY?或者?HAVING?子句;
遞歸查詢不能包含?Outer?Join?;
遞歸查詢不能包含子查詢 (Subquery);
遞歸查詢必須用?UNION?ALL?聯結。
三、通過CTE遞歸方式
--給數據加上序號 with?wa_RowNum(id,name,house,rn)?as(select?id,name,house,ROW_NUMBER()?OVER(PARTITION?BY?name)?from?TTABLE ), --CTE遞歸拼接house,序號最大的行拼接了所有的house數據 wa_addHouse(id,name,house,rn)?as(--1作為遞歸入口select?wr.id,wr.name,CAST(wr.house?AS?CLOB),wr.rn?from?wa_RowNum?wr?where?wr.rn=1UNION?ALLselect?nt.id,nt.name,CAST(self.house||';'||nt.house?AS?CLOB),self.rn+1from?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轉載于:https://my.oschina.net/sandant/blog/371102
總結
以上是生活随笔為你收集整理的多行并一行显示的两种方式(DB2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pat文件怎么打开
- 下一篇: .net Framework各个版本之