SQL 如何實現動態的行列轉置
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 難題的專業指令碼語言,它語法簡單,符合自然思維,是天然分步、層次清晰的程式導向計算語言。它採用與資料庫無關的統一語法,編寫的演算法可在資料庫間無縫遷移。它是桌面級計算工具,即裝即用,配置簡單,除錯功能完善,可設定斷點、單步執行,每步執行結果都可檢視。請參閱
當資料不在資料庫裡時,SPL 執行復雜計算仍然方便:
=file(“d:/t.csv”).import(;,",").pivot...
SPL能很方便地嵌入到JAVA應用,可參考 。
具體使用方法可參考 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2698821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- excel列轉行怎麼做 excel如何轉置行列Excel
- Spark實現行列轉換pivot和unpivotSpark
- 使用vue實現行列轉換的一種方法。Vue
- jenkins 動態引數實現可供選擇的用例執行列表Jenkins
- 在報表中錄入資料時如何實現行列轉換
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- 報表如何實現行列互換效果?
- web 展現資料時如何實現行列互換Web
- 關於IDEA使用xml實現動態sql的問題IdeaXMLSQL
- SQL 轉置計算SQL
- Mybatis 裡對映檔案的動態 SQL 語句,實現if,where,foreache的SQL語句動態拼接查詢MyBatisSQL
- 動態棧的實現
- MyBatis進階--介面代理方式實現Dao 和動態SQLMyBatisSQL
- Laravel 如何實現既能靜態呼叫,又能動態呼叫Laravel
- 實現二維陣列的行列互換陣列
- Spring的JDK動態代理如何實現的(原始碼解析)SpringJDK原始碼
- Restcloud ETl實踐之資料行列轉換RESTCloud
- Mybatis連線池_動態sql語句_多表查詢實現MyBatisSQL
- 如何配置 CAN 轉 PN 閘道器實現與 can 裝置的連線
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- MyBatis 動態 SQLMyBatisSQL
- MybBatis動態SQLBATSQL
- Mybatics動態sqlBATSQL
- mybatis動態SQLMyBatisSQL
- Java陣列如何實現動態初始化Java陣列
- Laravel 動態屬性的實現Laravel
- 【乾貨】JDK動態代理的實現原理以及如何手寫一個JDK動態代理JDK
- mysql行列轉換詳解MySql
- Linux下玩轉nginx系列(八)---如何使用upsync模組實現動態負載均衡LinuxNginx負載
- Python+numpy實現矩陣的行列擴充套件Python矩陣套件
- Laravel-admin 如何根據 select 的值實現動態 formLaravelORM
- MyBatis對動態SQL的支援MyBatisSQL
- Oracle行列轉換及pivot子句的用法Oracle
- Feign實現動態URL
- Flink SQL 如何實現資料流的 Join?SQL
- 動態執行緒池在轉轉平臺的實踐執行緒
- web動態驗證碼的實現Web
- 【轉】【SQL】 實現左單一匹配SQL