2016-12-16 72 views
1

我有一张表;表A.在MySQL中创建视图并将行转换为列

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

我想将value_deal行转换为与同一月份的列并将其设置为view,如下所示。

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

我试过使用动态转换行到列here。但是我不能在创建视图函数中插入代码。

谁能帮助?请

+0

为什么你想这是一个视图?一般来说,数据显示的问题最好在应用程序级代码中解决,如果有的话 – Strawberry

+1

另外,在没有任何PRIMARY KEY的情况下,你怎么知道一个是deal1,哪一个是deal2 – Strawberry

回答

0

我命名的表测试和下面的查询返回所需的结果

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; 

基本上使用组concat函数来得到一个列一个月所有的值,然后列拆分成多列通过使用内置的字符串函数。

这是一个demo