SQL实现多行变一行

来源:互联网 发布:飞思卡尔怎么样知乎 编辑:程序博客网 时间:2024/05/17 08:04

在我们需要将表的多行记录根据某字段值相等聚合成逗号间隔的一行记录,我们可以采用下列SQL来实现,简单、高效。

 

如表t下的记录: a1  b1  
1  aa  
1  bb  
1  cc  
2  aa  
2  aa 

得到结果 应该是下列样式: 
1 aa,bb,cc  
2 aa,aa  

 Oracle数据库中,可以用这个SQL来实现: 

select a1, substr(max(sys_connect_by_path(answer, ',')), 2) as b1 
  from (select a1, 
               b1, 
               row_number() over(partition by a1 order by b1) as rown 
          from t) 
 start with rown = 1 
connect by prior a1 = a1 
       and prior rown = rown - 1 
 group by a1


原创粉丝点击