mysql列轉多行

2021-10-03 17:36:28 字數 2845 閱讀 1358

初始化資料

執行初始化資料指令碼。

create

view v1 as

select

'張三'

as name

union

select

'李四,張三'

as name

union

select

'張三,王五,劉六'

as name;

執行查詢sql:select * from v1;,結果如下:

需求

需要統計所有的distinct name.

需要將帶有,分隔的行的資料轉換為多行。

然後使用mysql的substring_index()方法,擷取特定的長度的字串。

1.統計每一行有多少個特定字元』,'

2.將單行資料『擴充套件』為『len』行如何擴充套件呢? 我們可以建一張輔助表,表的內容很簡單,是一段連續的數值.

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

);

然後,步驟1的結果與這張輔助表左關聯。

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...