Oracle的 listagg() WITHIN GROUP ()函数使用
1.使用條件查詢? 查詢部門為20的員工列表
??? -- 查詢部門為20的員工列表
??? SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ;
??? 效果:
2.使用? listagg() WITHIN GROUP ()? 將多行合并成一行
??? SELECT
?? ??? ?T .DEPTNO,
?? ??? ?listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
??? FROM
?? ??? ?SCOTT.EMP T
??? WHERE
?? ??? ?T .DEPTNO = '20'
??? GROUP BY
?? ??? ?T .DEPTNO
??? 效果:
3. 使用 listagg() within GROUP () over? 將多行記錄在一行顯示
??? SELECT
?? ??? ?T .DEPTNO,
?? ??? ?listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME)? over(PARTITION BY T .DEPTNO)
??? FROM
?? ??? ?SCOTT.EMP T
??? WHERE
?? ??? ?T .DEPTNO = '20'
??? 效果:
??????? 注:使用的表數據是oracle 用戶scott下的emp(員工)表
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
當你的表X中有A,B兩列,數據如下
A B
a 1
a 2
a 3
b 1
b 2
b 3
想讓數據以 a|1|2|3 , b|1|2|3 格式顯示可使用listagg()
1、使用listagg() + group by
select A,B,listagg(B,'|') within GROUP (order by A) ?C from X group by A;
?over(partition?by class?order?by?sroce)?按照sroce排序進行累計,order?by是個默認的開窗函數,按照class分區(qū)。
2、使用listagg() + over(partition by ?)
select A,B listagg(B,'|') within Group(order by A) over(partition by A) ?C from X;
DBMS_LOB.SUBSTR(col1)不傳其它參數就是全部讀取
DBMS_LOB.SUBSTR(col1,10,1)表示從第1個字節(jié)開始取出10個字節(jié)
DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB變量保存的全部數據
DBMS_LOB.FILECLOSE(IMG_BFILE)關閉文件
轉載于:https://www.cnblogs.com/sjxbg/p/9859100.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Oracle的 listagg() WITHIN GROUP ()函数使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装setuptools与pip
- 下一篇: 车贷卡不销户会怎么样