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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql行列轉置的實現方法SQL
- 使用動態SQL語句實現簡單的行列轉置(動態產生列)SQL
- sql 實現表的行列轉換SQL
- 一個sql的行列轉置的例子SQL
- SQL Server 實現行列(縱橫表)轉換SQLServer
- sql語句實現表的行列倒置SQL
- 在SQL Server 2005中實現表的行列轉換SQLServer
- 行列轉換sqlSQL
- Oracle--SQL行列轉換實戰OracleSQL
- Kettle實現動態SQLSQL
- excel列轉行怎麼做 excel如何轉置行列Excel
- sql server 行列轉換SQLServer
- webwork下面如何實現動態轉發Web
- pivot、unpivot實現oracle行列轉換Oracle
- sqlserver 行列互轉實現小結SQLServer
- 試驗Oracle中實現行列轉換的方法(轉)Oracle
- sql server行列轉換案例SQLServer
- 【SQL 學習】行列轉換SQL
- 【SQL】行列轉換方法示例SQL
- jenkins 動態引數實現可供選擇的用例執行列表Jenkins
- Spark實現行列轉換pivot和unpivotSpark
- 使用vue實現行列轉換的一種方法。Vue
- 在Word中實現表格的行列互換 (轉)
- WORD及EXCEL行列轉換實現方法收藏(轉)Excel
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- 報表如何實現行列互換效果?
- 用abap實現內表的行列轉換-原始碼2 (轉)原始碼
- 在報表中錄入資料時如何實現行列轉換
- 用ORACLE分析函式實現行列轉換Oracle函式
- Ruby如何實現動態方法呼叫
- SQL Server中行列轉換 Pivot UnPivotSQLServer
- 動態SQL語句 (轉)SQL
- web 展現資料時如何實現行列互換Web
- 使用iptable實現動態防火牆(轉)防火牆
- BCB中實現動態建立元件 (轉)元件
- go如何實現類似java的動態代理GoJava
- 動態SQL中DESCRIPTOR的應用 (轉)SQL
- 動態棧的實現