postgresql 行轉列


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM