專案中遇到乙個需求,需要將多行合併為一行

2021-05-12 22:52:57 字數 1779 閱讀 7802

專案中遇到乙個需求,需要將多行合併為一行。

表結構如下:

name                            null          type

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

n_sec_code                not null  char(6)

c_researcher_code  not null  varchar2(20)

此表儲存了「**」與「研究員」的對應關係資料,一般而言,對於同一只**而言,可能有多個研究員對其進行跟蹤研究。所以目前遇到乙個要求,需查詢出每只**和對應的研究員(研究員**間,使用逗號分隔)。

例如有如下資料:

000297                                    chenpeng           

000297                                    liusu             

合併處理後需顯示為:

000297                                    chenpeng,liusu

網上查了很多方法,但通常而言都是編寫自定義多行文字合併函式,或者對支援的列數具有侷限性。

最後在英文google中搜到如下比較巧的方法。不用在資料庫中增加function,純sql一次性搞定,而且擴充性很好,沒有列的限制。

select  n_sec_code, translate (ltrim (text, '/'), '*/', '*,') researcherlist

from (select row_number () over (partition by n_sec_code order by n_sec_code,

lvl desc) rn,

n_sec_code, text

from (select    n_sec_code, level lvl,

sys_connect_by_path (c_researcher_code,'/') text

from (select  n_sec_code, c_researcher_code as c_researcher_code,

row_number () over (partition by n_sec_code order by n_sec_code,c_researcher_code) x

from m_researcher_stock_rel

order by n_sec_code, c_researcher_code) a

connect by n_sec_code = prior n_sec_code and x - 1 = prior x))

where rn = 1

order by n_sec_code;

預想的結果成功出現,多行資料成功彙總到一行,特此分享與大家。對於你自己的應用中,只需要把sql中「n_sec_code」換為你的用來彙總的列,「c_researcher_code」替換為需合併文字的列,「m_researcher_stock_rel」替換為你的表名,就是這麼簡單。

sql分析:

1、利用 「row_number () over (partition by……」 為按「****」彙總後的資料行新增組內序號

2、「sys_connect_by_path」  按組內序號相鄰關係,為每一層進行不同行的「研究員**」疊加

3、再次利用「****」進行組內分組,但按第二部中的層次排倒序,增加調整後等級

4、取所有調整後等級為1的結果,即為所要求的資料行

遇到乙個需求,需要將資料庫的字段,行轉列

1.本來查詢出來,是六行資料,現在要把六行資料,加在一行的,六列裡面。這裡需要用到行轉列 第一步 將查詢出來的六行資料,做乙個表,然後進行關聯,在把每乙個值取出來,放進新的列裡面。union all union all union all union all union all union all ...

最近專案中遇到的乙個演算法挑戰

在企業資訊化程序中,各類智慧型化運算在不斷挑戰著我們,最近又遇到乙個應用,歸納一下需要實現以下演算法 演算法設計 計算是否存在值x1,x2,xm,使等式成立 m x1 m 1 x2 m 3 x3 xm e 如果可解,取解集中各x的值,要求x1盡可能大,其次是x2,xm盡可能最大,在各x值相等情況下存...

乙個blog小專案中遇到的問題

小專案使用了easyui,在使用中遇到了一些問題,羅列如下,後續再有的,繼續補充。1.封面圖上傳的時候,使用jquery函式,頁面載入即載入方法,需要的效果是,選擇上傳的後,頁面會顯示的縮圖,使用ajax區域性重新整理,所以需要的是onchange事件,錯寫為onclick事件,導致上傳不成功,沒有...