mysql如何取消动态列的IVOT

7fhtutme  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(279)

我有下表:
表名:stat

Region   M07  M08 M09 
---------------------
P1       0    1   0    
P2       0    0   0   
P3       2    0   0    
P4       0    0   0     
P5       0    0   0     
P6       0    0   0   
P7       9    0   3

我想取消月份列,它包含数值。这个月的列标题是动态的,并且会改变,但是列的总数将保持不变。
预期结果

---------------------
Region   Month  Qty
---------------------
P1      M07    0
P1      M08    1
P1      M09    0
P2      M07    0
P2      M08    0
P2      M09    0

如果我能在编写unpivot的sql语句时得到一些帮助,然后考虑数值列的动态特性,那就太好了。它应该是用mysql写的。

vqlkdk9b

vqlkdk9b1#

遗憾的是,mysql没有 UNPIVOT 功能。
你最好的选择是 UNION ALL 解决方案,如:

SELECT region, 'M07' AS month, M07 AS qty from stat
UNION ALL
SELECT region, 'M08', M08 AS from stat
UNION ALL 
SELECT region, 'M09', M09 AS from stat

可以创建一段sql代码(例如存储过程),通过首先查询 INFORMATION_SCHEMA 检索列名,并使用结果生成查询文本。

相关问题