oracle多行記錄合併成一行。

2021-10-03 13:04:23 字數 1012 閱讀 6931

需要做個報表,把多行記錄,合併成一行。簡單記錄下。

注:以下內容為虛構資料,可能會出現不太對的現象,邏輯上是對的。現實中的比這複雜。

原始表:

部門人數

銷售30

售後20行政8

轉成:銷售8人,售後20人,行政8人。

考慮到資料庫版本的問題,目前用的是oracle 11g,12g的時候不再有wmsys.wm_concat(),所以改用listagg()。

下面是做報表時的一些細節。

個人認為listagg沒有wmsys.wm_concat自由,所以我把表重新整理了一下:

部門人數

銷售30人

售後20人

行政8人

然後用listagg連起來就行了。

select    listagg (  aa.部門人數 , ','  ) within group (order by aa.部門編號, aa.部門人數)     as 部門人數  from  部門人數
其中,引號中的逗號是分隔符。order by 後可以跟「部門人數表中的字段。

效果如下:

部門人數

銷售30人,售後20人,行政8人

最後再加上個日期:

select to_char( sysdate , 『yyyy-mm-dd』) || 『部門人數量:』 listagg ( aa.部門人數 , 『,』 ) within group (order by aa.部門編號, aa.部門人數) as 部門人數 from 部門人數

-------------

還有新功能:如下

listagg() within group over()

over (partition by ***) 代替了group by 的功能 。這樣會出現重複值,需要去重。本文沒有測試這種情況。

listagg ( aa.部門人數 , 『,』 ) within group (order by aa.部門編號, aa.部門人數) over (partition by ***x)

oracle多行合併成一行

在mysql有關鍵字group concat提供了類似的功能,在oracle中類似功能關鍵字是wm concat.比如我有如下查詢資料 但是我希望能夠顯示成一行查詢出來,結果圖如下 關鍵sql 形如 select t.sglcheckid,wm concat t.salemodulename fro...

oracle 將多行合併成一行

使用者id 使用者名稱 角色 001 admin 管理員 002 betty 教師 001 admin 教師 003 cole 學生 可以看到使用者admin有兩個角色 管理員和教師 也就是使用者和角色是多對多的關係 我們現在的需求是,將這兩個合併在一塊,由兩行資料變成一行資料 也就是在形式上將多對...

SQL查詢多行合併成一行

問題描述 無論是在sql 2000,還是在 sql 2005 中,都沒有提供字串的聚合函式,所以,當我們在處理下列要求時,會比較麻煩 有表tb,如下 id value 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到結果 id values 1 aa,bb 2 aaa,bbb,ccc...