初始化資料
執行初始化資料指令碼。
執行查詢sql:create
view v1 as
select
'張三'
as name
union
select
'李四,張三'
as name
union
select
'張三,王五,劉六'
as name;
select * from v1;
,結果如下:
需求
需要統計所有的distinct name
.
需要將帶有,
分隔的行的資料轉換為多行。
然後使用mysql的substring_index()
方法,擷取特定的長度的字串。
1.統計每一行有多少個特定字元』,'
2.將單行資料『擴充套件』為『len』行如何擴充套件呢? 我們可以建一張輔助表
,表的內容很簡單,是一段連續的數值
.
然後,步驟1的結果與這張create
table
`mysql_help_auto_increment`
(`id`
tinyint(3
)unsigned
,primary
key(
`id`))
engine
=innodb
default
charset
=utf8mb4 collate
=utf8mb4_unicode_ci;
insert
into mysql_help_auto_increment values(0
);insert
into mysql_help_auto_increment values(1
);insert
into mysql_help_auto_increment values(2
);insert
into mysql_help_auto_increment values(3
);insert
into mysql_help_auto_increment values(4
);insert
into mysql_help_auto_increment values(5
);insert
into mysql_help_auto_increment values(6
);insert
into mysql_help_auto_increment values(7
);insert
into mysql_help_auto_increment values(8
);insert
into mysql_help_auto_increment values(9
);
輔助表
左關聯。
此時,我們就已經將select
v1.name,
b.id
from
v1 left
join mysql_help_auto_increment b on b.id <
( length( v1.name )
- length(
replace
( v1.name,
',','')
)+1)
;
單行資料
成功為多行資料了。
引用:
最終結果:substring_index(str,delim,count)
str:要處理的字串
delim:分隔符
count:計數
SQL SERVER 多行轉多列
轉換結果如上圖 建立測試標 create table 成績表 編號 int identity 1,1 not null,姓名 varchar 50 null,語文 numeric 5,2 null,數學 numeric 5,2 null,英語 numeric 5,2 null on primary ...
hive多行轉多列
一 需求 需要將多行的資料,按照某個維度轉換為一行。轉換前 轉換後 db price area name 為 東北 的total price actual db qty area name 為 東北 的qty。二 解決方案 1 sql select brand,max case when area ...
行列轉換之 多行轉多列,多列轉多行實踐版
行列轉換之 多行轉多列,多列轉多行實踐版 參考 深入行列轉換 多行轉多列,多行的計算 參考 sql server動態行列轉換 要求 實操演示 1.全表 select from temp2 2.構造row number select row number over partition by a ord...