精华内容
下载资源
问答
  • oracle多列合并成一行
    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

    更多相关内容
  • SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并一行
  • Oracle,SQL,函数,拼接,转行

    LISTAGG函数可以把表某一列的值用指定的符号拼接到一行

    LISTAGG(列1, '连接符') WITHIN GROUP(ORDER BY 列2)

    原表:aaa

    SELECT
        *
    FROM
        aaa;
    USER_NAMESEX
    张龙
    赵虎
    王朝
    马汉

    用法一:用指定符号拼接列的所有值

    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_NAMESEXLISTAGG
    赵虎赵虎,马汉
    马汉赵虎,马汉
    张龙张龙,王朝
    王朝张龙,王朝

    另外:wm_concat函数也可以达到此目的,但是11gr2和12C版本已经弃用了,这里不推荐使用。

    展开全文
  • 大家平时在查询数据的时候,肯定会遇到需要将一个值变成一行; 第一种情况:显示在同一行的同一上 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;

    结果如下:

     

    展开全文
  • http://blog.csdn.net/rainyspring4540/article/details/50231435这里是oracle10g的环境数据库结构如下: 如果我想将相同名字的成绩显示在同一,有2中基本展示:第种展示(显示在同一的不同上) 其sql如下:...

    和mysql对比着看:http://blog.csdn.net/rainyspring4540/article/details/50231435

    这里是oracle10g的环境

    数据库结构如下:

    28fb23e71844e52421afe058045c799d.png

    如果我想将相同名字的成绩显示在同一行,有2中基本展示:

    第一种展示(显示在同一行的不同列上)

    920ba5199e0fbf7a372a2cf57bf60aa3.png

    其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

    第二中展示(显示在同一行的同一列上)

    8a037e9b07f4714f63d7d825aca3223b.png

    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:

    9f6259cbe390ce804913500ba6b68124.png

    展开全文
  • Oracle查询多行数据合并成一行数据

    千次阅读 2020-12-18 19:49:04
    ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE WM_CONCAT()方法 注意字符长度 SELECT BERTHCODE,tpf.freedatetype, ( SELECT WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT ... SQL SERVER将多行数据合并成一行(转载...
  • oracle group 多列合并

    千次阅读 2021-12-16 09:34:28
    listagg(vc_mm,',') WITHIN GROUP(ORDER BY vc_date)
  • oracle 多行数据合并成一行数据

    千次阅读 2022-06-23 11:10:02
    划水的时候看到有人问了这个问题(条数据合并成一条),顺手写个sql记录一下。
  • Oracle合并多列一行wm_concat

    千次阅读 2015-12-23 20:12:49
    Oracle合并多列一行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...
  • 方法: select field1,listagg(field3,',') within GROUP (order by field3) from test group by field1; 方法二(在方法报出所拼接的字符串长度过长时,使用方法二): select field1,xmlagg(xmlparse...
  • ORACLE多行合并一行

    2021-05-06 08:32:00
    demo场景,以oracle自带库中的表emp为例:select ...ENAMEDEPTNOCLARK10KING10MILLER10SMITH20ADAMS20FORD20SCOTT20JONES20ALLEN30BLAKE30MARTIN30JAMES30TURNER30WARD30现在想要将同一部门的人给合并成一行记录,...
  • LISTAGG(列名,'分割符号')oracle 11g 以上的版本才有的一个将指定列名的多行查询结果,用 指定的分割符号合并成一行显示:例如:表原始数据: 需求:将 mb1_Transport_License_list 表中的数据,根据 transportation...
  • 本人使用Oracle时,遇到以下情况:需要输出多列数据,但是这些数据却分布在多行的同列中。所以本人就想出了以下这种方式进行合并查询。示例是个GRADES表,记录每个学生的姓名、课程和分数,分数都放在GRADE列中...
  • 今天在做一个跑批任务中,需要在oracle函数里把多行数据合并成一行,顺道发挥下常用的几种方法。 一、wm_concat wm_concat函数是是oracle中常用的函数,功能:行转,可以将查询出的多行某值使用逗号进行隔开...
  • 在写需求的时候有个需求需要将签核线的每个人展示出来在table里的个格子里。 select listagg(t.signusername,'--->')within GROUP(order by t.type) as name from P10044_FILESIGN_SIGNOFF t
  • select listagg(serial_number, ‘’’,’’’) within group (order by serial_number) ||’’’’ from table where rownum<5;
  • ![图片说明](https://img-ask.csdn.net/upload/201703/22/1490150702_307569.png) 如图 假如表中存在前四数据,将要合并成数据,并且将不同值的 组成新的来显示数据。该如何实现。
  • Oracle数据库内数据大多按行存储,以测试数据样式为例: YM ...自己随手在数据库内建的数据,每个月对应一个数量,如果想要展示成一行多列: 数据202001|数据202002|数据202003|数据202004|数据
  • 需求:个患者的病例存在处规则不符 合并成 解决: 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:37
    listagg 函数------(有长度限制) SELECT listagg(字段, ',') within group(ORDER BY 字段) AS NAMES FROM 表 GROUP BY 字段 //去重:regexp_replace(listagg 函数, '([^,]+)(,\1)+', '\1') 用聚合函数,然后使用 ...
  • Oracle实现的思路是:对这两个字段group by分组,多列则按条件查询,用到decode函数 实现SQL如下: select t.container_code,t.bill_code, min(decode(status, 10, create_time)) as 成功时间1, min(decode...
  • 主要介绍了oracle实现多行合并的方法,实例讲述了oracle10g以后提供的函数WMSYS.WM_CONCAT的使用技巧,需要的朋友可以参考下
  • sql里将重复行数据合并一行,将多行fieldname字段的内容串联起来,用逗号分隔,接下来为大家介绍下详细的实现sql语句,希望对你有所帮助
  • 于是又找各种相似的,,终于功夫不负有心人然后最终自己写出来了,decode才是核心废话不说,看图需求示例图表:存储过程,嘿嘿:create or replace procedure NAG_QUESTIONERSULT_EXP(V_QID in number,C_...
  • --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, ',')...
  • 关键字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有两个角色-----管理员...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,628
精华内容 15,851
关键字:

oracle多列合并成一行