MySQL:将行数据转换为列

时间:2015-06-12 09:30:25

标签: mysql pivot transform

我在单元格中有这些数据:

  

1:0100
  2:77042609291929541
  3:3100000
  4:01
  7:12014
  11:115
  14:11502
  18:5999
  22:0112
  25:015
  41:00083121
  49:7014

如何将这些值转换为列? E.g。

col_1 |_______col_2_______ | _ col_3 _ |col_4 |col_5 |.....col_127 |col_128 |
_____________________________________________________________________________

0100  |77042609291929541   | 3100000   |.............................

1 个答案:

答案 0 :(得分:0)

GROUP_CONCAT就是您要搜索的内容。 https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

编辑:Oups,快速阅读你的问题, 他们不是简单的做你要求的方式,你可能想重新设计你的桌子。您可能需要遍历您的单元格并使用SUBSTRING_INDEX首先按\n拆分,然后切断:

我没有在哪里测试,所以它可能不能正常工作,但它只是为了给你一个开始。 (这也只是第一个循环,但内部循环完全相同。)

SET TEST = "1: 0100
2: 77042609291929541
3: 3100000
4: 01
7: 12014
11: 115
14: 11502
18: 5999
22: 0112
25: 015
41: 00083121
49: 7014";

SET len =  LENGTH(TEST);
SET startpos = 1;
REPEAT
        SET endpos = LOCATE('\n', TEST, startpos);
        SET item =  SUBSTR(TEST, startpos, endpos - startpos);

        IF item <> '' AND item IS NOT NULL THEN           
            print item;
        END IF;
        SET startpos = endpos + 1;
UNTIL startpos >= len END REPEAT;