Agregar varios valores en una columna separados por comas

Si tengo un campo CLOB que contiene múltiples valores separados por comas, y necesito sumrlos para get un resultado final, ¿cómo puedo lograr eso en SQL Developer?

Tabla de ejemplo:

STOCK | COST ABCDE | 258.40,299.50 FGHIJ | 100.50,70.50,95.30 

Me gustaría poder seleccionar el total para cada fila.

Para ABCDE que busca seleccionar un total de 557.90

Para FGHIJ que busca seleccionar un total de 266.30

Si tiene Oracle 12, puede usar LATERAL :

 select t.stock, sum(to_number(p.cst,'9999999.9999')) total from table_name t, lateral (select regexp_substr(t.cost,'[^,]+', 1, level) cst from dual connect by regexp_substr(t.cost, '[^,]+', 1, level) is not null) p group by t.stock 

De otra manera:

 select stock, sum(cst) total from ( select stock,to_number(column_value,'9999999.9999') cst from table_name t, xmltable(('"'|| REPLACE(t.cost, ',', '","')|| '"')) ) p group by stock 

Esta es una forma de usar un CTE (Common Table Expression) con una expresión regular que maneja elementos de list NULL (o explícitamente los ignora en la consulta, SUM los ignora de todos modos):

 SQL> -- First build the base table. SQL> with tbl(stk, cst) as ( select 'ABCDE', ',258.40,299.50' from dual union select 'FGHIJ', '100.50,70.50,,,95.30' from dual ), -- Turn the list into a table using the comma as the delimiter. Think of it -- like a temp table in memory. This regex format handles NULL list elements. example_tbl(stock, cost) as ( select stk, regexp_substr(cst, '(.*?)(,|$)', 1, level, NULL, 1) from tbl connect by regexp_substr(cst, '(.*?)(,|$)', 1, level) is not null group by stk, level, cst ) -- select * from example_tbl; SELECT stock, to_char(sum(cost), '9990.99') Total from example_tbl group by stock; STOCK TOTAL ----- -------- ABCDE 557.90 FGHIJ 266.30 SQL> 
    Intereting Posts