mysql 列轉行 動態查詢列

2021-09-27 01:23:02 字數 1593 閱讀 3851

參考鏈結 

建表語句

create table tb_score(

id int(11) not null auto_increment,

userid varchar(20) not null comment '使用者id',

subject varchar(20) comment '科目',

score double comment '成績',

primary key(id)

)engine = innodb default charset = utf8;

插入資料

insert into tb_score(userid,subject,score) values ('001','語文',90);

insert into tb_score(userid,subject,score) values ('001','數學',92);

insert into tb_score(userid,subject,score) values ('001','英語',80);

insert into tb_score(userid,subject,score) values ('002','語文',88);

insert into tb_score(userid,subject,score) values ('002','數學',90);

insert into tb_score(userid,subject,score) values ('002','英語',75.5);

insert into tb_score(userid,subject,score) values ('003','語文',70);

insert into tb_score(userid,subject,score) values ('003','數學',85);

insert into tb_score(userid,subject,score) values ('003','英語',90);

insert into tb_score(userid,subject,score) values ('003','政治',82);

執行語句

set @sql = null;

select

group_concat(distinct

concat(

"max(if(`subject` = '", `subject`, "',score,null)) as ", `subject`)

) into @sql

from tb_score;  #可在此處新增篩選條件 例如subject不為語文的 

set @sql = concat('select userid, ', @sql, '

from    tb_score 

group   by userid');

prepare stmt from @sql;

execute stmt;

deallocate prepare stmt;

Mysql 列轉行 例項

箱表 create table yoshop shang activity box id int 11 not null auto increment comment 編號 activity id int 11 not null comment 活動id number int 11 not null...

Mysql 採用列轉行

欄位的拆分 使用函式substring index str,delim,count str 拆分物件 delim 拆分標識 substring index 搜尋時執行區分大小寫的匹配 delim count 拆分方式 如果 count為正,則返回最終分隔符左側的所有內容 從左側開始計算 如果coun...

SQL 操作列轉行查詢

題目 如下一張學生成績表 tb score t name t course t score 小明 語文 90 小明 數學 87 小明 英語 85 小紅 語文 92 小紅 數學 89 小紅 英語 95 要求,寫出合理的sql語句,得到下面的結果 姓名 語文 數學 英語 小明 90 87 85 小紅 9...