现在,我有一堆数据存储在一个字段中,它是用逗号分隔的一系列数字:
ID Values
235077 8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
246576 1,2,3,4,5,9
114507 1,2,3,4,5,6,9
256493 8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256518 1,2,3,4,5,6,9
234587 1,2,3,4,5,9
256513 1,2,3,4,5,9
242822 8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256510 1,2,3,4,5,9
183173 1,2,3,4,5,9
256463 8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
255102 1,2,3,4,5,9
253850 1559,1560,1561,1562,2728,1,2,3,4,5,9
240286 9239,9242,1,2,3,4,5,8
64154 1,2,3,4,5,9
232844 1,2,3,4,5,9
246571 4317,1,2,3,4,5,9
我想要做的是以这样一种方式操纵数据:我不仅可以将值分开,而且将它们全部拉到与其ID对应的一列中。所以以64154
为例:
ID Values
65414 1
65414 2
65414 3
65414 4
65414 5
65414 9
我确定这会涉及某种Regex功能,但就上述方式级联数据而言,我输了。
答案 0 :(得分:0)
注意:当我回答时,这个问题被贴上了Postgres。
在Postgres中,这很容易。您可以使用横向连接:
select t.id, r.val
from t, lateral
regexp_split_to_table(v.x, ',' ) r(val);
我认为Redshift不具备此功能。
答案 1 :(得分:0)
只需使用UNNEST()函数即可。这是PostgreSQL中的一个内置函数,它允许将数组爆炸成每个数组元素的行,如下所示:
SELECT
id
, UNNEST(values)
FROM a_table
这消除了进行横向连接等的需要。