mysql行轉列(拆分字串場景)
一對多沒有建立中間表的時候經常會採用分隔符的形式將“多”儲存在“一”的一個欄位裡,這樣做的代價是無法像一對多的時候那樣直接關聯查詢,一般採用在程式中分割後分別查詢的辦法。如下圖:
如何才能直接用sql語句查詢出下圖的效果呢?
可以藉助一個序號表,該表中除了連續的id沒有其它欄位,id的值範圍取決於"一"中儲存的資訊拆分後的數量。
實現sql:
SELECT NAME, REPLACE( SUBSTRING_INDEX(mobile, ',', a.id), CONCAT( SUBSTRING_INDEX(mobile, ',', a.id - 1), ',' ), '' )AS mobile FROM squence a CROSS JOIN( SELECT NAME, CONCAT(mobile, ',')AS mobile, LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size FROM `user` )b ON a.id <= b.size
相關推薦
mysql行轉列(拆分字串場景)
一對多沒有建立中間表的時候經常會採用分隔符的形式將“多”儲存在“一”的一個欄位裡,這樣做的代價是無法像一對多的時候那樣直接關聯查詢,一般採用在程式中分割後分別查詢的辦法。如下圖: 如何才能直接用sql語句查詢出下圖的效果呢? 可以藉助一個序號表,該表中除了連續的id沒有
mysql行轉列(拆分單個欄位字串值場景)
SELECT ids,id,APPLY_ID, REPLACE( SUBSTRING_INDEX(REASON, ',', a.ids), CONCAT( SUBSTRING_INDEX(REASON, ',', a.ids - 1),
除錯經驗——使用自定義函式在Oracle中實現類似LISTAGG函式的行轉列(字串連線)功能
問題描述: LISTAGG函式是一個很實用的函式,但僅在Oracle 11.2以後的版本中才有。 生產環境中有個資料庫是Oracle 11.1,需要行轉列,但並不能使用LISTAGG函式。 解決方法: 參考以下文章: https://oracle-base.com/artic
mysql 行轉列
行轉列最近遇到一需求原始數據如下:mysql> select id,sdkname,sid,date,total_count from u1ge_query_log;+------+----------------+------+------------+-------------+| id | s
mysql行轉列轉換
pan where mys 作用 統計 detail null 這就是 英語 http://blog.csdn.net/sinat_27406925/article/details/77507478 mysql 行列轉換 ,在項目中應用的極其頻繁,尤其是一些金融項目裏的報表
MySQL行轉列與列轉行
展示 course order by rem core null innodb tail mysql 行轉列 例如:把圖1轉換成圖2結果展示 圖1 圖2 CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NU
sqlserver 行轉列(轉)
微軟 技術 all drop 記錄 記錄拆分 div student 數學 1、行轉列 微軟官方的圖: 方法二 -- 行轉列 DROP TABLE studentB; CREATE TABLE studentB (姓名 varchar(10),語文
MySQL行轉列經典案例
準備資料表 /* Navicat MySQL Data Transfer Source Server : MyDB Source Server Version : 50720 Source Host : localhost:3306 S
mysql-行轉列
mysql-行轉列 行轉列列傳行更具體例子 1、檢視資料 Sql程式碼 SELECT * FROM tabName ; &
SQL Server 動態行轉列(引數化表名、分組列、行轉列欄位、欄位值)
一.本文所涉及的內容(Contents) 二.背景(Contexts) 其實行轉列並不是一個什麼新鮮的話題了,甚至已經被大家說到爛了,網上的很多例子多多少少都有些問題,所以我希望能讓大家快速的看到執行的效果,所以在動態列的基礎上再把表、分組欄位、行轉列欄位、值這四個行轉列固定需要的值變成真正意義的
mysql行轉列
DROP TABLE IF EXISTS `class_info`; CREATE TABLE `class_info` ( `student_name` varchar(50) NOT NULL, `class_name` varchar(50) NOT NULL,
mysql行轉列利用case when
CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT ‘顧客’, shop INT(255) NULL DEFAU
mysql-行轉列、列轉行
group_concat(),函式說明 手冊上說明:該函式返回帶有來自一個組的連線的非NULL值的字串結果; 通俗點理解,其實是這樣的:group_concat()會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函式引數(就是欄位名)決定。分組必須有個標準,就是根據grou
mysql行轉列(if + sum)
mysql用sum+if 完成行轉列(行表資料如下) 首先思考如何創建出列結構 SELECT NAME AS '姓名', IF(type = '語文', score, 0) AS yuwen, IF(type = '數學', score, 0) AS shuxue
Linux提取不匹配字符串的行和列(awk函數)
div ont 字符串 pre IT int nan span http 如下圖所示,想把含有‘-nan’字符串的行提取出來 則用到awk函數,命令行如下: awk ‘{if($3!="-nan"){print $3}}‘ CHB_vs_
MySQL開發技巧 第二禪(行轉列 列轉行、生成唯一的序列、刪除重複的資料)
一、如何進行行列或者列行的轉換 行轉列的關鍵是union ,列轉行的關鍵是join 需要進行行轉列的場景 報表的設計  
MySQL的行轉列、列轉行、連線字串 concat、concat_ws、group_concat函式用法
1.concat函式 使用方法: CONCAT(str1,str2,…) 返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。 注意: 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變
sql pivot(行轉列) 和unpivot(列轉行)的用法
sql clas 數據 sele core unp null col style 1、PIVOT用法(行轉列) select * from Table_Score as a pivot (sum(score) for a.name in ([語文],[數學],[外語],[
sqlserver 行轉列、字串行轉列、自動生產行轉列指令碼
行轉列,老生常談的問題。這裡總結一下網上的方法。 1、生成測試資料: CREATE TABLE human( name NVARCHAR(5), --姓名 norm NVARCHAR(5), --指標 score INT , --分數
Oracle 技巧總結(一):行轉列 及 列裝行
1.行轉列 oracle中行轉列 語法結構select listagg(column1, ',') within group(order by column2) from X; 如下圖所示: listagg(attr1, attr2):第一個引數是要行轉列的那個欄位