У меня есть таблица, которая выглядит так:
AMT TYPE
100 red, yellow, green, purple
200 red, green, blue, yellow
90 pink, blue, light red
......
Я хочу сложить суммы по цвету. Например, конечный результат должен быть таким:
AMT TYPE
300 red
300 yellow
300 green
290 blue
190 other
Обратите внимание, что 1. я не хочу включать light red
в red
и 2. я хочу включить все цвета, кроме красного, желтого, зеленого и синего, в новую категорию «другое».
Мой текущий код
select sum(red), ... from (
select
case when trim(regexp_substr(type, red',1,1,'i')) is not null
then amt
else 0 end as red
......
from mytable)
Но это не решает проблемы, о которых я упоминал ранее. Я также пробовал следующий метод, но он становится настолько медленным, что никогда не заканчивается. (Или, может быть, в этом коде есть какая-то ошибка?)
select color, sum(amt)
from (
select trim(regexp_substr(type,'[^,]+', 1, level)) as color
from mytable
connect by level <= regexp_count(type, ',')+1)
group by color
Как я могу это решить?
Спасибо!