在 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 中创建视图并将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章