看了下,量不是很大,如果是这样子,我建议使用Excel直接转置。可以先将数据导出到CSV或xlsx或xls,然后执行如下操作:
其次选中需要处理的数据,然后复制
然后再新开一个空白sheet页面,右键后在菜单栏选中“选择性粘贴(S)...”
4.最后在选择性粘贴弹框中,在“运算”模块,勾选☑️“转置”即可。
5.然后就可以看到数据已经如你所愿
希望可以帮助到你。
SELECT t.years as '年度',
MAX(CASE t.city WHEN '上海' THEN t.gdp ELSE '' END ) as '上海',
MAX(CASE t.city WHEN '北京' THEN t.gdp ELSE '' END ) as '北京',
MAX(CASE t.city WHEN '郑州' THEN t.gdp ELSE '' END ) as '郑州'
from
(SELECT id,city,2019y as gdp,'2019y' as years from xiao_city_gdp
union all
SELECT id,city,2020y as gdp,'2020y' as years from xiao_city_gdp
union all
SELECT id,city,2021y as gdp,'2021y' as years from xiao_city_gdp) t
group by t.years;
请把字段、表名进行替换即可。
严格来说并没有这个功能,游标可以做到,但是这个是没有什么必要的。
首先性能就是一个大问题,一般来说我们不要在数据库做复杂的运算。
你在代码里想做这个其实很好做。
而且你的这个要求也很不合理。
你要知道,数据库的数据其实是行,无限的行,有限的列。
你这么转,如果我有5000万行数据呢?当然,你的业务上咩有,但是数据库的设计者要考虑这个
你要用一段程序去写。
或者动态语句。
5块钱提供思路给你。
这个最好在代码中实现,sql中不太好实现,可能就不能实现!
可以实现的,mysql行转列,见我的这篇博文,详细讲解
https://blog.csdn.net/weixin_43151418/article/details/124841383