Уникальная снежинка split_to_table

У меня есть следующая таблица в Snowflake:

Что я пытаюсь сделать, так это разделить столбцы B и C на новые строки, чтобы каждая запись была самостоятельной. Вот так:

Я попытался использовать приведенное ниже, и это близко к решению, к сожалению, я прикрепляю каждую запись в B к каждой записи в C. Хотя я хочу, чтобы они были отдельными, поэтому 2 = дерево, затем 3 = металл и так далее.

Это мой текущий подход и результат:

SELECT A, Y.VALUE, Z.VALUE
FROM TEST,
LATERAL split_to_table(B, ',')Y,
LATERAL split_to_table(C, ',')Z;

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете объединить их в отдельные табличные выражения в CTE и соединить их в последовательности и индексе:

create or replace transient table T1 (A string, B string, C string);
insert into T1 (A, B, C) values 
('Red', '2,3,4','Tree,Metal,House'),
('Green', '5,9,10','Building,Branch,Hose'),
('Blue','10,11,12,14','Roof,Tile,Van,Car')
;


with B as
(
select A, SEQ, INDEX, VALUE as B from T1, table(split_to_table(B, ','))
), C as
(
select SEQ, INDEX, VALUE as C from T1, table(split_to_table(C, ','))
)
select A, B, C from B left join C on B.SEQ = C.SEQ and B.INDEX = C.INDEX;
А Б С Красный 2 Дерево Красный 3 Металл Красный 4 Дом Зеленый 5 Здание Зеленый 9 Ветка Зеленый 10 Шланг Синий 10 Крыша Синий 11 Плитка Синий 12 Ван Синий 14 Машина

Предполагая, что B и C имеют одинаковое количество элементов, вы можете просто использовать индекс из первого бокового соединения, чтобы получить соответствующие элементы в C.

select a, y.value as b, split_part(c,',',y.index) as c
from t,
lateral split_to_table(b, ',') y

Другие вопросы по теме