oracle中多列轉行
方式一 : 通過wm_concat函式,該函式在10g可以使用,11g 中不相容,12g中去掉了該函式, ,返回型別為varchar
語法:wm_concat(列)
例子:Select wm_concat(Rownum) From dual Connect By Rownum < 10;
優點:語法簡單
缺點:字元長度不能超過4000,以逗號分隔,如果要以其他符號分割,還要替換,效能比較差
方式二:通過lisagg
,
返回型別為varchar
語法: listagg(引數,‘分隔符’) within group(order by 引數id)
例子:Select
listagg(Rownum,';') Within group(Order By Rownum Desc)
From dual Connect By Rownum < 10;
優點:可以排序,並且可以自定義分隔符,效率也高
缺點:拼接字元長度不能超過4000
方式三:通過xmlagg,是解析MXL用的,也可以用作字元拼接,返回clob型別
語法:
XMLAGG(XMLPARSE(CONTENT 欄位 || 分隔符 WELLFORMED) ORDER BY 欄位).GETCLOBVAL()
或
XMLAGG(XMLELEMENT(e, 字串 , 分隔符).Extract('//text()')).GETCLOBVAL()
例子:
可以使用下面兩種之一:
Select Xmlagg(Xmlparse(Content Rownum || ',' Wellformed) Order By Rownum Desc)
.Getclobval()
From Dual
Connect By Rownum < 30000;
Select Xmlagg(Xmlelement(e, Rownum, ',').Extract('//text()')).Getclobval()
From Dual
Connect By Rownum < 30;
優點:對字元拼接沒有長度限制
缺點:語法比較複雜
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557103/viewspace-2656949/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 列轉行Oracle
- oracle列轉行Oracle
- oracle 11g的行轉列、列轉行Oracle
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- Oracle行轉列函式Oracle函式
- oracle行列轉換-字串轉換成多列Oracle字串
- oracle行列轉換-多列轉換成字串Oracle字串
- Oracle行轉列的函式Oracle函式
- SQL 行轉列,列轉行SQL
- Mysql - 行轉列、列轉行MySql
- Oracle 行轉列的sql語句OracleSQL
- ORACLE 中ROWNUM(偽列)用法解析(轉載)Oracle
- oracle中對LONG列進行查詢Oracle
- oracle一列拆分為多列Oracle
- hive經典案列--top N(行轉列\列轉行)Hive
- oracle中執行os命令(轉)Oracle
- 將多列值轉換為一行顯示
- sql的行轉列(PIVOT)與列轉行(UNPIVOT)SQL
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- Oracle多列統計資訊Oracle
- oracle 行變列Oracle
- SQL列轉行SQL
- mysql列轉行MySql
- postgresql 列轉行SQL
- mysql 行轉列MySql
- Java程式中的多執行緒(1)(轉)Java執行緒
- Java程式中的多執行緒(2)(轉)Java執行緒
- UltraEdit 列操作及列轉行
- Spark SQL中列轉行(UNPIVOT)的兩種方法SparkSQL
- Oracle 11g Pivot函式實現行轉列Oracle函式
- .net 4.0 中對多執行緒新特性(轉)執行緒
- 動態行轉列
- SQL 列行轉換SQL
- 多維陣列轉一維陣列(降維的多種方式)陣列
- python多執行緒中訊息佇列如何實現?Python執行緒佇列
- DB2行列轉置之行轉列DB2