一句話實現欄位拆分成多行
把表中某欄位根據分隔符拆分成N個字串後,再用這N個字串把這一行演變成N行。
用SQL來解決這個問題非常煩瑣!
SQL裡沒有提供集合物件,不能提供根據拆分後的字串集合把一行變成多行的操作。解決這個問題的思路就是先求出欄位拆分後的最大字串個數M,然後構造一個M行1列的臨時表T2,其列名為lv,則各行lv值分別為1,2,……,M,然後用原表與之叉乘,叉乘時取欄位拆分後的第T2.lv個字串。這樣寫出來的SQL是多個子查詢巢狀而成,其語法是比較複雜的。而且各種資料庫中拆分字串的函式並不統一,所以SQL的寫法也各不相同。
舉個例子:現有學生選修課資料表COURSES資料如下,要求查出每個學生選修了幾門課:
COURSE | STUDENTS |
Chinese | Tom,Kate,John,Jimmy |
Russia | Tom,Cart,Jimmy |
Spanish | Kate,Joan,Cart |
Portuguese | John,Tom |
History | Tom,Cart,Kate |
Music | Kate,Joan,Tom |
要求輸出結果如下:
STUDENT | NUM |
Tom | 5 |
Kate | 4 |
Cart | 3 |
Jimmy | 2 |
Joan | 2 |
John | 2 |
以Oracle為例,用SQL寫出來是這樣:
SELECT STUDENT, COUNT(*) NUM FROM
(SELECT T1.COURSE, REGEXP_SUBSTR(T1.STUDENTS, '[^,]+', 1, T2.LV ) STUDENT
FROM COURSES T1,
( SELECT LEVEL LV
FROM (SELECT MAX(REGEXP_COUNT(A.STUDENTS, '[^,]+', 1)) R_COUNT
FROM COURSES A
) B
CONNECT BY LEVEL <= B.R_COUNT) T2
WHERE REGEXP_SUBSTR(T1.STUDENTS, '[^,]+', 1, T2.LV) IS NOT NULL
) C
GROUP BY STUDENT
ORDER BY NUM DESC;
這裡的C就是前文提到的那個臨時表,可見這個SQL層次很多,可讀性比較差,不易讀懂。
如果用集算器的SPL語言來解決這個問題,就會簡單很多,只需1行程式碼:
connect("mydb").query("SELECT * FROM COURSES").news(STUDENTS.split@c();~:STUDENT).groups(STUDENT;count(1):NUM).sort(-NUM)
SPL語言有集合物件,並提供了根據集合把一行擴充套件成多行的功能,所以寫起來思路清晰明瞭,簡便易懂,並且語法統一,不論資料來自哪種資料庫還是來自檔案型資料來源,寫法都是一樣的。
SPL 集合還提供了交、差、並運算,聚合運算,迴圈遍歷運算,請閱
SPL也能很方便地嵌入到JAVA應用,可參考 。
具體使用方法可參考 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2699168/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SharePoint 多行文字欄位設定預設值
- 實現高度“聽話”的多行文字輸入框
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 一句話實現MySQL庫中的重疊分組MySql
- 一句話得到 SQL 難實現的去年同期比SQL
- CSS實現單行、多行文字溢位顯示省略號的實現方法CSS
- 在oracle中將一行字串拆分成多行Oracle字串
- 織夢多行文字自定義欄位 支援自動換行
- CSS實現單行、多行文字溢位顯示省略號CSS
- MySQL:count(*) count(欄位) 實現上區別MySql
- 快排實現仿order by多欄位排序排序
- 多行文字溢位時出現省略號
- 一句話實現MySQL庫中的按條件變化分組MySql
- 一句話實現MySQL庫中的按連續等值分組MySql
- MySQL簡單實現多欄位模糊查詢MySql
- SAP CRM calculated欄位的實現原理講解
- 欄位修改記錄操作日誌的實現
- 一句話實現MySQL庫中的有序列舉條件分組MySql
- C# 實現list=list.OrderBy(q=>q.欄位名).ToList(); 按多個欄位排序C#排序
- postgresql中檢視建立,欄位拼接,同一個表的多行之間的多個欄位相減SQL
- SQL INSERT INTO 語句詳解:插入新記錄、多行插入和自增欄位SQL
- 【前端芝士樹】純CSS實現多行文字溢位顯示省略號前端CSS
- 實現註解校驗Dto欄位是否為空
- 簡單sql欄位解析器實現參考SQL
- 一句話解釋TransformerORM
- pydantic 欄位欄位校驗
- sqlsugar 實現實體類中欄位是字串陣列情況SqlSugar字串陣列
- 如何在MySQL中實現替換欄位部分內容MySql
- 主表子表動態欄位儲存實現方式總結
- 一句話理解設計模式設計模式
- 本週AI一句話摘要AI
- 一句話總結原型鏈原型
- 純 CSS 實現多行文字截斷CSS
- TF實戰Q&A丨不是一句話可以搞定的
- fastadmin 新增欄位記圖片欄位AST
- webpack4之splitchunksPlugin拆拆拆--專案實踐WebPlugin
- 一句話設計模式,不再迷路~設計模式
- 一句話總結隨機森林隨機森林