У меня есть следующий набор данных. я пытаюсь сопоставить строку в Col = "Str_B_Class" со всей строкой в col = "Str_A". У столбца str_A есть данные как class: value. если класс найден в Str_A, то sql должен получить значение после двоеточия в требуемый_колонку_выходов, в противном случае 0
Проблема с кодом ниже состоит в том, что если его допустим, скажем, найдено 3132, а значение 10, то вместо этого, если возвращается 1 строка, в которой найдено 3132, она возвращается 6 раз. поэтому он взрывает весь набор данных. Мне нужна помощь в сопоставлении строки без разбора всей таблицы.
Customer_ID || Str_A || Str_B_Class || Desired_Output
-------------------------------------------------------------------------------------------
A1 || 121:8|188:8|3123:10|3125:10|3131:10|3132:10 || 3132 || 10
A1 || 121:8|188:8|3123:10|3125:10|3131:10|3132:10 || 3125 || 10
A1 || 121:8|188:8|3123:10|3125:10|3131:10|3132:10 || 4141 || 0
Запрос:
select
s.Customer_Id,
s.Str_A,
s.Str_B_Class,
case when s.instance_id = s.Str_B_Class
then s.Count_of_instances
else '0'
end AS Desired_Output
from (
select
Customer_Id, Str_A,
Str_B_Class,
explode(str_to_map(Str_A,'[|]','[:]')) as (instance_id, Count_of_instances)
from my_table
) as s