Это довольно уродливо.
Сначала давайте разделим эти разделенные строки, используя strtok_split_to_table
.
create volatile table vt_split as (
select
txn_id,
token as part
from table
(strtok_split_to_table(your_table.txn_id,your_table.part_c,'/')
returns (txn_id integer,tokennum integer,token varchar(10))) t
)
with data
primary index (txn_id)
on commit preserve rows;
Это даст вам все эти разделенные части с соответствующим txn_id.Затем мы можем объединить это со значениями part_n.
create volatile table vt_merged as (
select * from vt_split
UNION ALL
select
txn_id,
cast(part_n as varchar(10)) as part
from
vt_foo)
with data
primary index (txn_id)
on commit preserve rows;
Наконец, мы можем присоединить это обратно к вашей исходной таблице, чтобы получить количество клиентов по частям.
select
vt_merged.part,
count (distinct yourtable.customer_id)
from
vt_merged
inner join yourtable
on vt_merged.txn_id = yourtable.txn_id
group by 1
Это можетвозможно, сделано немного чище, но это должно дать вам то, что вы ищете.