繁体   English   中英

通过分隔符逗号将多列拆分为行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM