1. 程式人生 > >DB2資料庫多行一列轉換成 一行一列

DB2資料庫多行一列轉換成 一行一列

在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資料庫本人親測有效,暫不確定其它型別資料庫是否支援此函式,其它資料庫行轉列操作方法後續更新。