mySQL 如何逆透视动态列

标签 mysql sql date union unpivot

我有下表:

表名称: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/

相关文章:

mysql - 更新后 SQL 触发器不起作用

mysql - 用mysql计算余额

java - 为什么这个 java 表达式返回一个负结果?

xcode - 从 NSDate 获取该月第一天的星期名称

PHP:点击时更改变量值

c# - 如果我使用列表从数据库收集信息,如何自动刷新数据网格?

mysql - 内连接查询中的 where 子句

php - 在事务启动之前使用值的多个更新语句 MySQL

MySQL:大表、慢查询和索引

mysql - 如何将1170101这样的日期格式转换为mysql日期格式2017-01-01?