mysql数据库行列矩阵调换位置(行与列调换)

本文介绍了一种在MySQL数据库中通过复杂SQL查询实现数据表行列转换的方法,并将转换后的数据保存到视图中,以实现数据分析的便利性和效率提升。

工作上的需求:

根据一个表(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

最后得到的数据如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizige2008

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值