DB2資料庫多行一列轉換成 一行一列
阿新 • • 發佈:2019-02-14
在db2中遇到多行一列轉為一行一列的需求時,用db2函式 LISTAGG可以實現該功能。語法如下:
SELECT
[分組的欄位 ] , LISTAGG([需要聚合的欄位名], ',')
FROM [表名]
GROUP BY [分組的欄位名] ;
設計以下實驗,闡述該函式實現行轉列的方法。
步驟1:用sql構造一張臨時表資料如下:
select * from ( values ('1', 'aa'), ('1', 'bb'), ('1', 'cc'), ('2', 'aa'), ('2', 'bb'), ('3', 'aa') ) as table_test(id,name) ;
步驟2.轉換前查詢資料返回結果
ID NAME
1 aa
1 bb
1 cc
2 aa
2 bb
3 aa
步驟3.用函式轉換後,語法如下
select S.id ,listagg(S.name , ',') as name_new from ( select * from ( values ('1', 'aa'), ('1', 'bb'), ('1', 'cc'), ('2', 'aa'), ('2', 'bb'), ('3', 'aa') ) as table_test(id,name) ) S group by S.id;
查詢返回值如下:
ID NAME_NEW
1 aa ,bb ,cc
2 aa ,bb
3 aa
多列值合併已實現。
注意:
1.此實驗用步驟1的sql語句當做資料表,真實環境替換為表名即可。
2.以上方法在db2資料庫本人親測有效,暫不確定其它型別資料庫是否支援此函式,其它資料庫行轉列操作方法後續更新。