资讯详情

各数据库SQL查询结果多行数据合并成一行

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 

标签: pk1接近传感器sc1204

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台