MySQL单行宽表旋转90度转为日期、值两列长表的查询方法问询
MySQL宽表转长表实现方案
你的需求属于典型的列转行操作,因为原表仅1行数据,可根据你的MySQL版本选择对应实现方案:
方案1:MySQL 8.0+ 版本(无需手动枚举100个列名)
利用JSON函数和JSON_TABLE直接拆解整行数据为键值对,适配多列场景:
SELECT j.`key` AS Dates, j.`value` AS Values FROM 替换为实际表名 t, JSON_TABLE( JSON_OBJECT(t.*), '$.*' COLUMNS ( `key` VARCHAR(255) PATH '$[0]', `value` VARCHAR(255) PATH '$[1]' ) ) j;
说明:如果原表存储的数值是数字类型,可将
value的返回类型调整为对应INT/DECIMAL等类型即可。
方案2:MySQL 5.x 及更低版本兼容方案
使用UNION ALL拼接每列的查询结果,示例如下:
SELECT 'Date1' AS Dates, Date1 AS Values FROM 替换为实际表名 UNION ALL SELECT 'Date2' AS Dates, Date2 AS Values FROM 替换为实际表名 UNION ALL SELECT 'Date3' AS Dates, Date3 AS Values FROM 替换为实际表名 -- 剩余日期列按照上述格式依次补齐即可
如果列数太多不想手动敲,可以先执行以下语句查询所有列名,批量套入上述模板生成完整语句:
SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = '替换为实际表名' AND TABLE_SCHEMA = '替换为实际库名';
内容的提问来源于stack exchange,提问作者anesongib
相关产品推荐
相关产品推荐

