将MySQL行转换为列

-6 mysql

我有一个mysql表,其中一列如下:

1
2
3
4
5
6
7
A
B
C
Y
...
Run Code Online (Sandbox Code Playgroud)

我需要将它转换为4列表,如下所示:

|  1 |  2 |  3 |  4 |
|  5 |  6 |  7 |  A |
|  B |  C |  Y | ...|
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Zan*_*ien 6

ALTER TABLE tbl 
    ADD COLUMN col1 CHAR(1),
    ADD COLUMN col2 CHAR(1),
    ADD COLUMN col3 CHAR(1),
    ADD COLUMN col4 CHAR(1);

SET @rn = 0;

INSERT INTO tbl (col1, col2, col3, col4)
SELECT SUBSTRING(GROUP_CONCAT(a.col ORDER BY a.rn), 1, 1),
       SUBSTRING(GROUP_CONCAT(a.col ORDER BY a.rn), 3, 1),
       SUBSTRING(GROUP_CONCAT(a.col ORDER BY a.rn), 5, 1),
       SUBSTRING(GROUP_CONCAT(a.col ORDER BY a.rn), 7, 1)
FROM   (
       SELECT col, @rn:=@rn+1 AS rn
       FROM   tbl
       ) a
GROUP BY CEIL(a.rn / 4);

ALTER TABLE tbl DROP COLUMN col;

DELETE FROM tbl 
WHERE col1 IS NULL AND 
      col2 IS NULL AND
      col3 IS NULL AND 
      col4 IS NULL;
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示