-
2021-04-30 11:18:44
方案一:wm_concat函数
select username, id, wmsys.wm_concat(subject) as subject, wmsys.wm_concat(score) as score
from STUDENTSCORES
group by username, id
方案二:listagg函数
select username, id, LISTAGG(subject, ‘-‘) within group(order by subject) as subject, LISTAGG(score, ‘,‘) within group(order by score) as score
from STUDENTSCORES
group by username, id
方案三:常规sql
select username, id, translate(ltrim(subject, ‘/‘), ‘*/‘, ‘*,‘) as subject,translate(ltrim (score, ‘/‘), ‘*/‘, ‘*,‘) as score
from
(select row_number() over (partition by username, id order by username, id, lvl desc) as rn, username, id, subject, score
from
(select username, id, level lvl, sys_connect_by_path (subject, ‘/‘) as subject, sys_connect_by_path (score, ‘/‘) as score
from
(select username, id, subject, score, row_number() over (partition by username,id order by username, id) as num from STUDENTSCORES order by username, id)
connect by username = prior username and id = prior id and num - 1 = prior num))
where rn = 1;
注意:
方案一中默认分隔符为 ‘,’
方案二只适合11g之后的版本
原文:https://www.cnblogs.com/qqjj/p/12922272.html
更多相关内容 -
一列分割成多列,多行合并为一行
2020-12-23 09:34:41SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行 -
Oracle如何将表的某一列的所有值合并成一行
2021-12-07 16:27:22Oracle,SQL,函数,拼接,列转行LISTAGG函数可以把表某一列的值用指定的符号拼接到一行
LISTAGG(列1, '连接符') WITHIN GROUP(ORDER BY 列2)
原表:aaa
SELECT * FROM aaa;
USER_NAME SEX 张龙 男 赵虎 女 王朝 男 马汉 女 用法一:用指定符号拼接列的所有值
SELECT LISTAGG(user_name, ',') WITHIN GROUP( ORDER BY user_name ) listagg FROM aaa t;
执行结果:
LISTAGG 张龙,王朝,赵虎,马汉 用法二:按分组,用指定符号拼接分组内列的值
SELECT t.*, LISTAGG(user_name, ',') WITHIN GROUP( ORDER BY user_name ) OVER( PARTITION BY sex ) listagg FROM aaa t;
执行结果:
USER_NAME SEX LISTAGG 赵虎 女 赵虎,马汉 马汉 女 赵虎,马汉 张龙 男 张龙,王朝 王朝 男 张龙,王朝 另外:wm_concat函数也可以达到此目的,但是11gr2和12C版本已经弃用了,这里不推荐使用。
-
oracle中 合并列值 将一列的多个值合并成一行
2019-05-23 17:56:26大家平时在查询数据的时候,肯定会遇到需要将一列的多个值变成一行; 第一种情况:显示在同一行的同一列上 1、新建一个表test 可以参考:https://blog.csdn.net/heqiang525/article/details/90210326 里面的建表...大家平时在查询数据的时候,肯定会遇到需要将一列的多个值变成一行;
第一种情况:显示在同一行的同一列上
1、新建一个表test
可以参考:https://blog.csdn.net/heqiang525/article/details/90210326
里面的建表、插入数据的操作。结果如下图:
2、selcect name, wmsys.wm_concat(type) type_sums from test group by name;
其中wmsys.wm_concat(type) 也可以改成wmsys.wm_concat(score)
结果如下:
结果中的type_sums显示<CLOB>点击旁边的...也可以正常显示内容,但是感觉不爽!!!
修改如下:
select name, dbms_lob.substr(wmsys.wm_concat(type)) type_sums from test group by name;
完美解决!!!结果如下:
第二种情况:显示在同一行的不同列上
select name, max(decode(type,'math',score,0)) as 数学, max(decode(type,'english',score,0)) as 英语, max(decode(type,'chinese',score,0)) as 语文 from test group by name;
结果如下:
-
oracle行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)
2021-05-05 02:44:44http://blog.csdn.net/rainyspring4540/article/details/50231435这里是oracle10g的环境数据库结构如下: 如果我想将相同名字的成绩显示在同一行,有2中基本展示:第一种展示(显示在同一行的不同列上) 其sql如下:...和mysql对比着看:http://blog.csdn.net/rainyspring4540/article/details/50231435
这里是oracle10g的环境
数据库结构如下:
如果我想将相同名字的成绩显示在同一行,有2中基本展示:
第一种展示(显示在同一行的不同列上)
其sql如下:
select name ,
max(decode(type,'math',score,0)) as 数学,
max(decode(type,'english',score,0)) as 英语,
max(decode(type,'chinese',score,0)) as 语文
from stu2
group by name由于这里一个人只对应一科目的成绩,所有你用max和sum是一样的,如果一个人一个科目有多个成绩,这时sum就是求和的意思了,而max就是取最大值,我就不在写案例了,自己注意下就ok
第二中展示(显示在同一行的同一列上)
sql如下:
select name ,
max(decode(type,'math',score,0)) ||';'||
max(decode(type,'english',score,0)) ||';'||
max(decode(type,'chinese',score,0)) as allScore
from stu2
group by name如果你熟悉字符串拼接||的用法就能做出更多样式:
样式1:
-
Oracle查询多行数据合并成一行数据
2020-12-18 19:49:04ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE WM_CONCAT()方法 注意字符长度 SELECT BERTHCODE,tpf.freedatetype, ( SELECT WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT ... SQL SERVER将多行数据合并成一行(转载... -
oracle group 多列合并为一列
2021-12-16 09:34:28listagg(vc_mm,',') WITHIN GROUP(ORDER BY vc_date) -
oracle 多行数据合并成一行数据
2022-06-23 11:10:02划水的时候看到有人问了这个问题(多条数据合并成一条),顺手写个sql记录一下。 -
Oracle合并多列到一行wm_concat
2015-12-23 20:12:49Oracle合并多列到一行wm_concat Oracle在group by后合并表的某一列,以逗号隔开 或者合并整个表中的一列 www.2cto.com 函数为wm_concat 用法如下: 把表中一列合并成一行 select wm_concat... -
oracle查询多行数据合并成一行数据
2021-01-11 19:40:56如果是oracle 10g以上 一个wm_concat函数就可以解决。如果是oracle 9i以下就有点麻烦了。表结构如下:NAME Null Type------------------------ --------- -----N_SEC_CODENOT NULL CHAR(6)C_RESEARCHER_CODENO... -
oracle数据库将多个列的查询结果集合并到一行中
2021-12-27 09:57:31方法一: select field1,listagg(field3,',') within GROUP (order by field3) from test group by field1; 方法二(在方法一报出所拼接的字符串长度过长时,使用方法二): select field1,xmlagg(xmlparse... -
ORACLE多行合并为一行
2021-05-06 08:32:00demo场景,以oracle自带库中的表emp为例:select ...ENAMEDEPTNOCLARK10KING10MILLER10SMITH20ADAMS20FORD20SCOTT20JONES20ALLEN30BLAKE30MARTIN30JAMES30TURNER30WARD30现在想要将同一部门的人给合并成一行记录,... -
oracle 聚合函数 LISTAGG ,将多行结果合并成一行
2021-05-04 07:37:08LISTAGG(列名,'分割符号')oracle 11g 以上的版本才有的一个将指定列名的多行查询结果,用 指定的分割符号合并成一行显示:例如:表原始数据: 需求:将 mb1_Transport_License_list 表中的数据,根据 transportation... -
ORACLE学习札记-合并多行数据到一行中
2021-04-30 11:19:41本人使用Oracle时,遇到以下情况:需要输出多列数据,但是这些数据却分布在多行的同一列中。所以本人就想出了以下这种方式进行合并查询。示例是一个GRADES表,记录每个学生的姓名、课程和分数,分数都放在GRADE列中... -
Oracle常用函数之多行数据合并成一行
2020-01-03 16:18:23今天在做一个跑批任务中,需要在oracle函数里把多行数据合并成一行,顺道发挥下常用的几种方法。 一、wm_concat wm_concat函数是是oracle中常用的函数,功能:行转列,可以将查询出的多行某列值使用逗号进行隔开... -
Oracle多行一列数据拼接成一行一列的数据
2022-01-10 12:00:18在写需求的时候有一个需求需要将签核线的每个人展示出来在table里的一个格子里。 select listagg(t.signusername,'--->')within GROUP(order by t.type) as name from P10044_FILESIGN_SIGNOFF t -
oracle利用listagg把多列合成一行并用指定分隔符分割
2020-04-22 10:38:08select listagg(serial_number, ‘’’,’’’) within group (order by serial_number) ||’’’’ from table where rownum<5; -
oracle多行合并成一行,并且行内不同值组成新列。显示在同一行
2017-03-22 02:51:12 如图 假如表中存在前四行数据,将要合并成两行数据,并且将不同值的 组成新的列来显示数据。该如何实现。 -
Oracle数据库中实现“多行一列”转“一行多列”
2021-09-09 09:59:43Oracle数据库内数据大多按行存储,以测试数据样式为例: YM ...自己随手在数据库内建的数据,每个月对应一个数量,如果想要展示成一行多列: 数据202001|数据202002|数据202003|数据202004|数据 -
Oracle一列的多行数据合并拼成一行显示
2019-03-01 15:44:50需求:一个患者的病例存在多处规则不符 合并成 解决: 1.wm_concat方法: select data_id,wmsys.wm_concat(rule_name) as rule_name from RHSA_AUDIT_RESULTS where data_id='a3506a2206f3417fb204993096d5... -
Oracle分组多行合并一行
2021-10-11 13:37:37listagg 函数------(有长度限制) SELECT listagg(字段, ',') within group(ORDER BY 字段) AS NAMES FROM 表 GROUP BY 字段 //去重:regexp_replace(listagg 函数, '([^,]+)(,\1)+', '\1') 用聚合函数,然后使用 ... -
Oracle多行合并为单行多列
2020-07-28 17:39:57Oracle实现的思路是:对这两个字段group by分组,多列则按条件查询,用到decode函数 实现SQL如下: select t.container_code,t.bill_code, min(decode(status, 10, create_time)) as 成功时间1, min(decode... -
oracle实现多行合并的方法
2020-09-10 11:13:22主要介绍了oracle实现多行合并的方法,实例讲述了oracle10g以后提供的函数WMSYS.WM_CONCAT的使用技巧,需要的朋友可以参考下 -
sql里将重复行数据合并为一行数据使用逗号进行分隔
2020-09-10 22:01:09sql里将重复行数据合并为一行,将多行fieldname字段的内容串联起来,用逗号分隔,接下来为大家介绍下详细的实现sql语句,希望对你有所帮助 -
Oracle 多行转多列,列值转为列名
2021-05-07 01:44:55于是又找各种相似的,,终于功夫不负有心人然后最终自己写出来了,decode才是核心废话不多说,看图需求示例图表:存储过程,嘿嘿:create or replace procedure NAG_QUESTIONERSULT_EXP(V_QID in number,C_... -
ORACLE行转列(行转一列,行转多列)
2021-05-03 02:47:24--listagg(合并多行的值为字符串,只用一列来显示)select status, count(*), listagg(risk_id, ',') within group (order by risk_id) from rp_risk group by status;select risk_id, status, listagg(risk_id, ',')... -
数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)
2021-05-02 03:37:53关键字row_number() over (partition by)例如,下面的数据, 这是... 第一步:将每一组的property标上序号select name,property,row_number() over (partition by name order by property desc) column_num from ... -
oracle 将多行合并成一行
2018-01-03 17:39:46一、概述 参考如下表数据: 用户ID 用户名 角色 001 admin 管理员 002 betty 教师 001 admin 教师 003 cole 学生 可以看到用户admin有两个角色-----管理员...