sql如何实现明细账_SQL 如何实现动态的行列转置
Oracle 和新版 Mysql 里有 pivot 實現行列轉置,但實際處理數據時,會碰到一些更復雜的轉置情況,pivot 也搞不定,比如:
想轉置成:
這個難點在于事先不知道有多少種收入來源,而且每個人的收入來源種類各不相同。先得計算出種類個數,根據個數動態生成表結構,然后按照順序填充每個人的多個收入數據。
SQL 的計算過程不提倡分步,對集合操作支持的也不徹底,很難應付這種多步驟復雜計算。
如果用集算器的 SPL 語言來處理,就能輕松實現:
>A3.record(B4)A3 格子根據原始數據得到期望數據結構的空表;B4 格子得到每個人要填充入空表的數據。
如果不用復雜計算得到結果列,只是根據某個字段值動態生成列,直接用 pivot 函數就可以;具體的列都不用指定,根據字段值自動生成:
=connect(”mysqlDB”).query(“select * from t”).pivot(g1;g2,f)。
除了動態行列轉置,還有雙向轉置、轉置同時存在列間運算等復雜轉置需求,這些計算用 SPL 都容易編寫出來,參考《轉置》。
集算器 SPL 是解決 SQL 難題的專業腳本語言,它語法簡單,符合自然思維,是天然分步、層次清晰的面向過程計算語言。它采用與數據庫無關的統一語法,編寫的算法可在數據庫間無縫遷移。它是桌面級計算工具,即裝即用,配置簡單,調試功能完善,可設置斷點、單步執行,每步執行結果都可查看。請參閱SQL 解題手
當數據不在數據庫里時,SPL 執行復雜計算仍然方便:
=file(“d:/t.csv”).import(;,",").pivot...
SPL能很方便地嵌入到JAVA應用,可參考《Java 如何調用 SPL 腳本》。
具體使用方法可參考 《如何使用集算器》。
總結
以上是生活随笔為你收集整理的sql如何实现明细账_SQL 如何实现动态的行列转置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在官网下载java JDK的历史版本
- 下一篇: linux mysql v_Linux