我有下表:
表名称: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
我想对包含数值的月份列进行 UNPIVOT。本月列标题是动态的并且会发生变化,但列总数将保持不变。
预期结果
---------------------
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
来检索列名称,然后使用结果来构建查询文本。
关于mySQL 如何逆透视动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53990574/