我有一個表(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 匹配。我想拆分逗號分隔值并將它們轉換為行。理想的輸出如下:
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 與 tags_name 不是 1:1 匹配...我想EXCEPT在選擇查詢中使用 ,因為還有許多其他列我不想手動將它們全部列出。
uj5u.com熱心網友回復:
一種選擇是保留每個串列中每個元素的偏移量,以便我們可以使用該資訊在相關行未嵌套后連接它們:
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
uj5u.com熱心網友回復:
或者,您可以unnest tag_id使用offset索引來提取tag_name
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530944.html
標籤:Google Cloud Collective sql数组谷歌大查询不嵌套
