While possible,
datatable(id:int, col:string)
[
1, "ABC-123 (8), ABC-123 (12), ABC-123 (5), DEF (3), DEF (1), GHI (3)"
,2, "DEF (3), DEF (4), DEF (5), GHI (4), GHI (5), JKL (7)"
]
| mv-apply kv = extract_all(@"(\S+)\s*\((\d+)\)", col) on
(
summarize v = tostring(sum(toint(kv[1]))) by k = tostring(kv[0])
| summarize col = array_strcat(make_list(strcat(k, " (", v, ")")), ", ")
)
| id |
col |
| 1 |
ABC-123 (25), DEF (4), GHI (3) |
| 2 |
DEF (12), GHI (9), JKL (7) |
Fiddle
storing the result as dictionary seems to be more useful than concatenated it all back to a string.
datatable(id:int, col:string)
[
1, "ABC-123 (8), ABC-123 (12), ABC-123 (5), DEF (3), DEF (1), GHI (3)"
,2, "DEF (3), DEF (4), DEF (5), GHI (4), GHI (5), JKL (7)"
]
| mv-apply kv = extract_all(@"(\S+)\s*\((\d+)\)", col) on
(
summarize v = sum(toint(kv[1])) by k = tostring(kv[0])
| summarize col = make_bag(pack_dictionary(k, v))
)
| id |
col |
| 1 |
{"ABC-123":25,"DEF":4,"GHI":3} |
| 2 |
{"DEF":12,"GHI":9,"JKL":7} |
Fiddle
and we can also take an additional step and transform the dictionaries to columns
datatable(id:int, col:string)
[
1, "ABC-123 (8), ABC-123 (12), ABC-123 (5), DEF (3), DEF (1), GHI (3)"
,2, "DEF (3), DEF (4), DEF (5), GHI (4), GHI (5), JKL (7)"
]
| mv-apply kv = extract_all(@"(\S+)\s*\((\d+)\)", col) on
(
summarize v = sum(toint(kv[1])) by k = tostring(kv[0])
| summarize col = make_bag(pack_dictionary(k, v))
)
| evaluate bag_unpack(col)
| id |
ABC-123 |
DEF |
GHI |
JKL |
| 1 |
25 |
4 |
3 |
|
| 2 |
|
12 |
9 |
7 |
Fiddle