在 MySQL 中创建视图并将行转换为列

Posted

技术标签:

【中文标题】在 MySQL 中创建视图并将行转换为列【英文标题】:Create View and Convert Rows into Column in MySQL 【发布时间】:2016-12-16 08:04:00 【问题描述】:

我有一张桌子;表 A。

+-----+----------+
|month|value_deal|
+-----+----------+
|JAN  |10        |
+-----+----------+
|JAN  |20        |
+-----+----------+
|FEB  |30        |
+-----+----------+
|FEB  |40        |
+-----+----------+

我想将行 value_deal 转换为具有相同月份的列并使其成为视图,就像这样。

+-----+-----------+-----------+
|month|value_deal1|value_deal2|
+-----+-----------+-----------+
|JAN  |10         |20         |
+-----+-----------+-----------+
|FEB  |30         |40         |
+-----+-----------+-----------+

我尝试在here 中使用动态将行转换为列。但我无法在 Create View 函数中插入代码。

有人可以帮忙吗?请

【问题讨论】:

为什么要这个视图?一般来说,数据显示问题最好在应用程序级代码中解决,如果有的话 另外,在没有任何 PRIMARY KEY 的情况下,你怎么知道一个是 deal1,哪个是 deal2 【参考方案1】:

我将表命名为 test,以下查询返回所需的结果

SELECT QRY.M,
       SUBSTRING_INDEX(SUBSTRING_INDEX(QRY.CONC, ',', 1), ',', -1) as value_deal1,
       SUBSTRING_INDEX(SUBSTRING_INDEX(QRY.CONC, ',', 2), ',', -1) as value_deal2
FROM   (SELECT MONTH AS M, GROUP_CONCAT(value_deal) AS CONC
        FROM test1
        GROUP BY MONTH) QRY;

基本上使用group concat函数来获取一列中月份的所有值,然后使用内置的字符串函数将该列拆分为多列。

这是demo

【讨论】:

以上是关于在 MySQL 中创建视图并将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

如何在MySQL中创建视图

如何在MySQL中创建视图?

在 SQL Server 视图中有效地将行转换为列

如何在 mySQL 中创建一个空的 VIEW

通过在 Oracle Apex 中创建视图将 cols 转换为 oracle 中的行

如何查看用于在 phpMyAdmin 或其他程序中创建视图的原始 MySQL?