Mysql動態行轉列(不使用儲存過程)

2021-10-24 18:21:58 字數 2583 閱讀 8097

資料:

行轉列後的資料:

sql如下(示例):

建立**

create

table

`dome`

(`id`

intnot

null

auto_increment

,`testdate`

date

default

null

comment

'時間'

,`testtext`

varchar(50

)default

null

comment

'姓名'

,`stature`

double

default

null

comment

'身高'

,primary

key(

`id`))

engine

=innodb

auto_increment=14

default

charset

=utf8;

資料

>

insert

into

`dome`

(`id`

,`testdate`

,`testtext`

,`stature`

)>

values(5

,'2020-10-01'

,'張三'

,1.66),

>(6

,'2020-11-01'

,'張三'

,1.68),

>(7

,'2020-12-01'

,'張三'

,1.7),

>(8

,'2020-10-01'

,'李四'

,1.7),

>(9

,'2020-11-01'

,'李四'

,1.76),

>(10

,'2020-12-01'

,'李四'

,1.78),

>(11

,'2020-10-01'

,'王五'

,1.66),

>(12

,'2020-11-01'

,'王五'

,1.7),

>(13

,'2020-12-01'

,'王五'

,1.75

);

行轉列動態sql

set

@sql

=null

;select

group_concat(

distinct

concat(

'sum(if(a.testdate = ''',

date_format(a.testdate, '

%y-%m-

%d'), ''', a.stature, 0)) as ''',

date_format(a.testdate,'

%y-%m-

%d'), ''''))

into

@sql

from

(select

*from dome where testdate between

'2020-10-01'

and'2020-12-20'

) a;

set@sql

= concat(

'select testtext,'

,@sql

,' from dome a group by a.testtext');

prepare stmt from

@sql

;-- 動態生成指令碼

execute stmt;

-- 動態執行指令碼

deallocate

prepare stmt;

prepare stmt2 from

@sql

;-- 生產sql

execute stmt2;

-- 執行sql

select

@sql

--可檢視生成的sql

注意:資料量大的時候group_concat有長度限制!預設1024

執行如下sql改變group_concat長度

set

global group_concat_max_len=

102400

;set

session group_concat_max_len=

102400

;

mysql 動態行轉列 MySQL行轉列

比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...

MySql動態行轉列

靜態行轉列簡單一點。動態行轉列就需要涉及到儲存過程。需要統計每個班下了多少套秋裝和冬裝,但由於有的學校可能還下了夏裝,每個學校下的款式不一樣,所以這個列是動態的 所以建乙個檢視 如圖 需要把這個行轉為列 如下儲存函式 begin set sql null set ssq null select gr...

動態行轉列

因狗血的報表展現需求 需要根據每天的新增使用者數量 選取前5個渠道.然後把該渠道當月每一天的新增使用者資料繪製在圖表上 x軸是 日期 y軸是新增使用者數量 畫5條線.這5條線是動態的,每天不同的線條.資料經過後台統計後形成表 statedate,channle id,channle name,new...