SQL查询结果多行数据合并成一行
-
- 一、Oracle函数多行数据合并成一行
- 二、Mysql函数多行数据合并成一行
- 三、sqlserver函数多行数据合并成一行
- 四、postgresql函数多行数据合并成一行
业务需要在oracle多行数据在函数中合并成一行,顺便发挥几种常用的方法。
一、Oracle函数多行数据合并成一行
wm_concat函数是是oracle常用的函数,功能:行转列,可以用逗号将查询到的多行列值分开拼接,成为数据。
例如,现在有一个风险表,每个风险项目(risk_id)对应的规则很多(risk_rule),现在我想根据风险项查询相应的规则。
select risk_id, wm_concat(risk_rule) from risk_jour where risk_id='50010' group by risk_id
listagg函数是在oracle11g后来增加的是实现字符串聚合的内建函数。还可以实现行转列功能,将某个字段的多行数据合并成一个。
select listagg(ri.risk_name, ';') within group(order by ri.risk_name) as name_list from t_risk ri
用法说明:
1.LISTAGG(数据表中的字段需要拼接,'分隔符') WITHIN GROUP( ORDER BY 数据表中的字段需要拼接) 2.用法与聚合函数相似,通过Group by句子,把每一个Group拼接一个字段。
二、Mysql函数多行数据合并成一行
上述数据需按用户名分组,所选课程列不同项目用逗号分开,一行显示,效果如下:
select username,group_concat(coursename Separator ',') as coursename from t_user_course group by username;
三、sqlserver函数多行数据合并成一行
SELECT username, coursename= ( STUFF( (SELECT ',' coursename FROM t_user_course WHERE username= A.username FOR xml path('') ),1,1,'' ) ) FROM t_user_course A GROUP by cm_pk1;
四、postgresql函数多行数据合并成一行
SELECT c_id ,string_agg(param_cname,',') AS cname ,string_agg(param_value,',') AS value FROM base_channel_param WHERE c_id in (29,30) GROUP BY c_id