您好,登錄后才能下訂單哦!
Oracle 和新版 Mysql 里有 pivot 實現行列轉置,但實際處理數據時,會碰到一些更復雜的轉置情況,pivot 也搞不定,比如:
想轉置成:
這個難點在于事先不知道有多少種收入來源,而且每個人的收入來源種類各不相同。先得計算出種類個數,根據個數動態生成表結構,然后按照順序填充每個人的多個收入數據。
SQL 的計算過程不提倡分步,對集合操作支持的也不徹底,很難應付這種多步驟復雜計算。
如果用集算器的 SPL 語言來處理,就能輕松實現:
|
A | B |
1 | =connect("db") | =A1.query("select * from Income") |
2 | =B1.group(Name) | =A2.max(~.len()) |
3 | =create(Name,${B2.("Source"+string(~)+",Income"+string(~)).concat@c()}) |
|
4 | for A2 | =A4.Name|A4.conj([Source,Income]) |
5 |
|
>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 腳本》。
具體使用方法可參考 《如何使用集算器》。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。