由于genres 与 json 兼容,您可以使用超类型、PartiQL 和一些列表聚合来完成此操作。
让我们做一些表格。
create temporary table _so (
genres text
);
insert into _so values
('["drama","action","comedy"]'),
('["drama","comedy","thriller"]'),
('["drama","romance"]');
这里的基本模式是将列转换为超类型 (supered),使用 PartiQL 将值转换为行 (super_pivot),然后在将这些字符串值转换回字符串后聚合它们。 (lag)。
with supered as (
select
json_parse(genres) genres
from
_so
), super_pivot as (
select
sup.genres,
item
from
supered as sup,
sup.genres as item
), lag as (
select
genres,
listagg(cast(item as varchar), '|') delimited
from
super_pivot
group by
genres
)
select * from lag;
请注意,这假定 genres 是唯一的。如果不是,也许可以创建一个row_number 或稍后汇总的内容,这样您最终会得到与起点相同的行数。
| genres |
delimited |
| ["drama","comedy","thriller"] |
drama|comedy|thriller |
| ["drama","action","comedy"] |
drama|action|comedy |
| ["drama","romance"] |
drama|romance |