日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多行并一行显示的两种方式(DB2)

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多行并一行显示的两种方式(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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。