mySQL 如何逆透视动态列

mySQL how to unpivot dynamic columns

我下面有table:

Table 姓名:统计

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  

我想对包含数值的月份列进行 UNPIVOT。此月列 headers 是动态的并且会发生变化,但列的总数将保持不变。

预期结果

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

如果我能得到一些帮助将此 SQL 语句写入 UNPIVOT,然后再考虑数字列的动态特性,那就太好了。 应该写成mySQL.

遗憾的是,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 来动态生成此 SQL 查询以检索列名称,并使用结果构建查询文本。