[英]Split multiple columns into rows by delimiter comma
我有一个表 (Bigquery),它在两列中有 ', ' 分隔值:
id tag_id tag_name
1 1, 2, 4 a, b, d
2 3 c
3 1, 4 a, d
对于每个 tag_id 与 tag_name 是 1:1 匹配的。 我想拆分逗号分隔值并将它们转换成行。 理想的 output 是这样的:
id tag_id tag_name
1 1 a
1 2 b
1 4 d
2 3 c
3 1 a
3 4 d
我的工作进度SQL:
SELECT * EXCEPT(t, tn) REPLACE(t AS tag_id, tn AS tags_name)
FROM `table`,
UNNEST(SPLIT(tag_id, ', ')) t, UNNEST(SPLIT(tags_name, ', ')) tn
但似乎 tag_id 不是 1:1 与 tags_name 匹配...我想在 select 查询中使用EXCEPT
,因为还有许多其他列,我不想手动列出它们。
一种选择是保留每个列表中每个元素的偏移量,这样我们就可以使用该信息在相关行取消嵌套后加入它们:
select t.id, elt_id, elt_name
from mytable t
cross join unnest( split(t.tag_id, ', ') ) elt_id with offset as rn_id
cross join unnest( split(t.tag_name, ', ') ) elt_name with offset as rn_name
where rn_id = rn_name
或者,您可以取消tag_name
tag_id
并使用offset
索引来提取unnest
select id,
elt_id as tag_id ,
split(tag_name, ',')[safe_offset(rn_id)] as part1
from cte t,unnest(split(t.tag_id,',')) elt_id with offset as rn_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.