資料:
行轉列後的資料:
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...