需要对数据进行排序,以便列中的值列表如下所示
列
12A
12B
3
4
12H
RR
然后在排序和聚合后我需要其输出如下,
new_agg_col
3,4,12A,12B,12H,RR
我正在使用listagg函数来汇总一行数据。
答案 0 :(得分:0)
在您正在执行LISTAGG的表或查询中,您可以使用正则表达式提取一个只包含数字的新字段,另一个具有字母然后在LISTAGG的ORDER BY中,您可以使用这些列进行排序。
我现在没有时间查看完整代码,如果您需要,请告诉我。
没有测试我相信那些正则表达式
'([0-9]+)'
'([A-Za-z]+)'
答案 1 :(得分:0)
Oracle安装程序:
CREATE TABLE table_name ( value ) AS
SELECT '12A' FROM DUAL UNION ALL
SELECT '12B' FROM DUAL UNION ALL
SELECT '3' FROM DUAL UNION ALL
SELECT '4' FROM DUAL UNION ALL
SELECT '12H' FROM DUAL UNION ALL
SELECT 'RR' FROM DUAL;
<强>查询强>:
SELECT LISTAGG( value, ',' )
WITHIN GROUP (
ORDER BY TO_NUMBER( REGEXP_SUBSTR( value, '^\d+' ) ) NULLS LAST,
REGEXP_SUBSTR( value, '\D.*' )
) AS ordered_list
FROM table_name;
<强>输出强>:
ORDERED_LIST
------------------
3,4,12A,12B,12H,RR