• oracle-wm_concat函数与LISTAGG函数(合并列值)


    select * from DEMO.TEST;
    
    • 1
    IDNAMEAGEADDRES
    1cx1湖北
    1cx1湖北
    1cx0.1湖北
    1cx0.1湖北
    1cx11湖北
    1cx21湖北
    1cx10.1湖北
    1cx20.1湖北
    1cx1湖南
    1cx1长沙
    1cx0.1上海
    1cx0.1长沙
    1cx11湖南
    1cx21上海
    1cx10.1长沙
    1cx20.1上海
    • wm_concat(列名)函数:该函数可以把列值以”,“逗号分隔起来,并显示成一行;
    select id,name,age,REPLACE(wm_concat(address), ',', ';') from DEMO.TEST group by id,name,age;
    
    • 1
    IDNAMEAGEREPLACE(WM_CONCAT(ADDRESS),‘,’,‘;’)
    1cx0.1湖北;长沙;上海;湖北
    1cx1湖北;长沙;湖南;湖北
    1cx10.1湖北;长沙
    1cx11湖北;湖南
    1cx20.1湖北;上海
    1cx21湖北;上海

    看似好像没有什么问题,现在我们来将number 类型的合并一下:

    IDNAMEADDRESSREPLACE(WM_CONCAT(AGE),‘,’,‘;’)
    1cx长沙1;.1
    1cx湖北1;.1;.1;1
    1cx湖南1
    1cx上海.1
    1cx1长沙.1
    1cx1湖北1;.1
    1cx1湖南1
    1cx2湖北1;.1
    1cx2上海1;.1
    发现端倪了,在number类型转换成varchar类型时, .前面的0会被自动省略掉.此时我们需要对参数做一下判断:
    select id,name,address,REPLACE(wm_concat(nvl(nullif(substr(to_char(age),0,1),'.'),'0'||to_char(age))), ',', ';') from DEMO.TEST group by id,name,address;
    
    • 1
    IDNAMEADDRESSREPLACE(WM_CONCAT(NVL(NULLIF(SUBSTR(TO_CHAR(AGE),0,1),‘.’),‘0’\\TO_CHAR(AGE))),‘,’,‘;’)
    1cx长沙1;0.1
    1cx湖北1;0.1;0.1;1
    1cx湖南1
    1cx上海0.1
    1cx1长沙0.1
    1cx1湖北1;0.1
    1cx1湖南1
    1cx2湖北1;0.1
    1cx2上海1;0.1

    可以看出上述经过合并后,并没有排序,此时可以用另外一个与其有相似功能的函数LISTAGG

    SELECT id,name,address,LISTAGG(nvl(nullif(substr(to_char(age),0,1),'.'),'0'||to_char(age)),',') WITHIN GROUP(ORDER BY age) AS columns
    FROM DEMO.TEST
    group by id,name,address;
    
    
    • 1
    • 2
    • 3
    • 4
    IDNAMEADDRESSCOLUMNS
    1cx长沙0.1,1
    1cx湖北0.1,0.1,1,1
    1cx湖南1
    1cx上海0.1
    1cx1长沙0.1
    1cx1湖北0.1,1
    1cx1湖南1
    1cx2湖北0.1,1
    1cx2上海0.1,1
  • 相关阅读:
    C# 通过Dynamic访问System.Text.Json对象
    计算机毕业设计ssm+vue基本微信小程序的校园生活助手系统
    javascript 实现五子棋人机PK-v2
    pytest一些常见的插件
    es6 函数的使用
    Docker中MySql容器的数据挂载
    VoLTE基础自学系列 | 汇总
    leetcode-239-滑动窗口最大值
    使用 Python 和 Matplotlib下载美股数据
    攻防世界Encode
  • 原文地址:https://blog.csdn.net/m0_56981185/article/details/126464190