我在Postgres服务器中有一个SQL表,每个ID有几个名称,我需要按行分配它们。该文件是这样的:
| Id | Names |
| AA00001X | "Agent_1, Agent_2, Agent_3" |
| BA00002X | "Agent_1, Agent_6" |
| CA00002X | "Agent_4, Agent_2" |
| DA00001Y | "Agent_2" |
我需要的是这样的一张桌子:
| Id | Name |
| AA00001X | "Agent_1" |
| AA00001X | "Agent_2" |
| AA00001X | "Agent_3" |
| BA00002X | "Agent_1" |
| BA00002X | "Agent_6" |
| CA00002X | "Agent_4" |
| CA00002X | "Agent_2" |
| DA00001Y | "Agent_2" |
我试图使用R接口并构建能够做到这一点的代码。但是,初始文件很大(3.1 Go),由于我的配置,R无法处理它。我认为直接在SQL上这样做会更容易,但我不是SQL代码方面的专家。
您可以将列表转换为数组,然后取消嵌套该数组:
select t.id, trim(x.name) as name
from the_table t
cross join lateral unnest(string_to_array(trim(both '"' from t.names), ',')) as x(name)
order by t.id;
trim(both '"' from t.names)
在将其转换为数组之前,从逗号分隔的字符串中删除双引号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句