工作上的需求:
根据一个表(stu_bysjytj)的数据,矩阵调换位置(即列与行调换位置),并保存至数据库的视图中。
表(stu_bysjytj)的数据结构如下:

请点击输入图片描述
解决方案如下:
以下是mysql数据库的具体操作代码:
解释:
id、leibie、jiangong、yuanlin、zaojia、zhuangshi、wuye、jiudian、xueqian、heji为视图的字段
第一行:
id=1,leibie=biye_num …
id=2,leibie=jiuye_num…
id=3 leibie=w_jiuye_num…
…
以此类推
select '1' AS `id`,
'biye_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`BYS_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`BYS_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`BYS_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`BYS_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`BYS_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`BYS_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`BYS_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`BYS_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '2' AS `id`,'jiuye_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`QDJY_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`QDJY_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`QDJY_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`QDJY_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`QDJY_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`QDJY_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`QDJY_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`QDJY_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '3' AS `id`,'w_jiuye_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`ZWQDJY_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`ZWQDJY_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '4' AS `id`,'bgy_jiuye_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`JTNJY_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`QDJY_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union select '5' AS `id`,'jicengyixian' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`YXGG_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`YXGG_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`YXGG_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`YXGG_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`YXGG_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`YXGG_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`YXGG_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`YXGG_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '6' AS `id`,'qianxue_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`QYRS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`QYRS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`QYRS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`QYRS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`QYRS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`QYRS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`QYRS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`QYRS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '7' AS `id`,'wanyuan_num' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`WYYX_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`WYYX_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`WYYX_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`WYYX_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`WYYX_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`WYYX_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`WYYX_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`WYYX_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '8' AS `id`,'kunnan_jiuye' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`JYKN_ZS` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`JYKN_ZS` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`JYKN_ZS` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`JYKN_ZS` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`JYKN_ZS` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`JYKN_ZS` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`JYKN_ZS` end)) AS `xueqian`,
(select concat(sum(`stu_bysjytj`.`JYKN_ZS`)) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '9' AS `id`,'jiuye_lv' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`JYL` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`JYL` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`JYL` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`JYL` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`JYL` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`JYL` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`JYL` end)) AS `xueqian`,
(select (case when (sum(`stu_bysjytj`.`QDJY_ZS`) = sum(`stu_bysjytj`.`BYS_ZS`)) then concat(round(((sum(`stu_bysjytj`.`QDJY_ZS`) / sum(`stu_bysjytj`.`BYS_ZS`)) * 100),0),'%') else concat(round(((sum(`stu_bysjytj`.`QDJY_ZS`) / sum(`stu_bysjytj`.`BYS_ZS`)) * 100),2),'%') end) AS `heji` from `stu_bysjytj` where ((`stu_bysjytj`.`ND` = '2020') and (`stu_bysjytj`.`MAJOR` in ('0101','0601','0201','0501','0301','0401','0701')))) AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
union
select '11' AS `id`,'kunnan_fenxi' AS `leibie`,
max((case when (`stu_bysjytj`.`MAJOR` = '0101') then `stu_bysjytj`.`JYKNYYFX` end)) AS `jiangong`,
max((case when (`stu_bysjytj`.`MAJOR` = '0601') then `stu_bysjytj`.`JYKNYYFX` end)) AS `yuanlin`,
max((case when (`stu_bysjytj`.`MAJOR` = '0201') then `stu_bysjytj`.`JYKNYYFX` end)) AS `zaojia`,
max((case when (`stu_bysjytj`.`MAJOR` = '0501') then `stu_bysjytj`.`JYKNYYFX` end)) AS `zhuangshi`,
max((case when (`stu_bysjytj`.`MAJOR` = '0301') then `stu_bysjytj`.`JYKNYYFX` end)) AS `wuye`,
max((case when (`stu_bysjytj`.`MAJOR` = '0401') then `stu_bysjytj`.`JYKNYYFX` end)) AS `jiudian`,
max((case when (`stu_bysjytj`.`MAJOR` = '0701') then `stu_bysjytj`.`JYKNYYFX` end)) AS `xueqian`,'' AS `heji` from `stu_bysjytj` where (`stu_bysjytj`.`ND` = '2020') group by 1
最后得到的数据如下:

本文介绍了一种在MySQL数据库中通过复杂SQL查询实现数据表行列转换的方法,并将转换后的数据保存到视图中,以实现数据分析的便利性和效率提升。
&spm=1001.2101.3001.5002&articleId=105545397&d=1&t=3&u=baefd3c0767a4ceb8afb000a68b149d2)
367

被折叠的 条评论
为什么被折叠?



