文章參考路徑: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主要是講冗余的可以拼接起來,如果是空字符串則拼成空字符竄,如果是多余的則會拼成一個,當然以后還需要根據具體的業務使用哪種拼接方式。