文章参考路径:https://www.jianshu.com/p/31c586446512
开发过程中主要引用了“自建函数(动态)”这个函数,但是我对这个函数做了一点修改,因为我的列是多个列
我要把supplycode,status,expirydateend,expirydatestart,credentialtype这四列合并到一起之后在进行行转列。利用row_to_json将这四列转为为jsonb格式,然后利用左连接和supplycode,text关联起来
on aa.supplycode=(cc.linceseresult->>'supplycode')::VARCHAR and aa.value=(cc.linceseresult->>'credentialtype')::VARCHAR
得到这样的结果,然后再根据select supplycode,'tab'||value as text,COALESCE(linceseresult,'{"status":"3"}')插入到一个实体表中。
接下来调用动态函数,动态函数的改动是:将string_agg((case '||cat||' when '''||arow.col||''' then '||value_field||' else '''' end),'''') '||cat||'_'||arow.col;
改为 ,to_json(string_agg((case '||cat||' when '''||arow.col||''' then '||value_field||' else '''' end),'''')::jsonb) '||arow.col;
这样我获取的列就是jsonb属性的字段了。直接用json不行,其中string_agg是用来合并空项,jsonb是去掉双引号,
最终结果就是这样,如果没有::jsonb
就会出现这样,如果不用string_agg进行合并,而改用jsonb_agg则会出现
这次主要建了一个实体表,本来想建临时表,但是postgresql的临时表存货周期过短。
string_agg主要是讲冗余的可以拼接起来,如果是空字符串则拼成空字符窜,如果是多余的则会拼成一个,当然以后还需要根据具体的业务使用哪种拼接方式。