У меня есть следующая таблица в 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;


Вы можете объединить их в отдельные табличные выражения в 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;
Предполагая, что B и C имеют одинаковое количество элементов, вы можете просто использовать индекс из первого бокового соединения, чтобы получить соответствующие элементы в C.
select a, y.value as b, split_part(c,',',y.index) as c
from t,
lateral split_to_table(b, ',') y