中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL 如何實現動態的行列轉置

發布時間:2020-08-11 18:45:18 來源:ITPUB博客 閱讀:415 作者:rqgxy 欄目:數據庫

Oracle 和新版 Mysql 里有 pivot 實現行列轉置,但實際處理數據時,會碰到一些更復雜的轉置情況,pivot 也搞不定,比如:

SQL 如何實現動態的行列轉置

想轉置成:

SQL 如何實現動態的行列轉置

這個難點在于事先不知道有多少種收入來源,而且每個人的收入來源種類各不相同。先得計算出種類個數,根據個數動態生成表結構,然后按照順序填充每個人的多個收入數據。

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 腳本》。

具體使用方法可參考  《如何使用集算器》。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

县级市| 余江县| 普宁市| 海淀区| 岚皋县| 利川市| 阿荣旗| 黄大仙区| 濉溪县| 罗城| 贺州市| 锡林浩特市| 西安市| 三明市| 乃东县| 花莲县| 汝阳县| 西峡县| 兴山县| 贡嘎县| 澄江县| 共和县| 石家庄市| 潮州市| 清新县| 兰考县| 安阳县| 东乡县| 通辽市| 四子王旗| 双辽市| 克什克腾旗| 吉木萨尔县| 堆龙德庆县| 康定县| 青田县| 中卫市| 上虞市| 于田县| 上栗县| 绵竹市|