MySQL将多行转换为新列

时间:2014-03-27 22:53:26

标签: mysql pivot transpose workbench

我正在尝试在MySQL工作台中编写一个数据透视功能,而且我看过的许多地方并不是超级相关的。

我目前有:

order_ID     Part    Description    Order number
   1          103      A               1
   2          104      B               1
   3          103      A               2
   4          105      C               3
   5          103      A               4
   6          105      C               4
   7          107      D               4

我想创建:

Order    Part1   Description     Part2  Description   Part3 Description  
 1         103        A           104     B
 2         103        A           
 3         105        C           
 4         103        A           105     C            107     D

我可以将主键保留在输出中,但这不是必需的。我遇到的问题是许多枢轴功能涉及使用不同的部件名称来移动它们;但是,我有500多个零件。我还想将描述和部分组合在一起,使它们彼此相邻 - 大多数枢轴功能都不足以解决这个问题。

我确实在Excel中编写了一个宏来执行此操作,但由于在R中进行了进一步分析,我必须在数据库中完成此操作,并且我从数据库中提取数据,并且我必须自动执行对数据所做的任何更改。因此,我无法选择如何组织和布局数据。请不要提及规范化数据或其他数据库技术,因为我正在尝试修复数据以及它有多乱,但我没有选择如何输入数据。

我曾经在MySQL中获得使用数据透视的一些资源,但我无法获得任何代码。

MySQL pivot table

mysql pivoting - how can I fetch data from the same table into different columns?

http://en.wikibooks.org/wiki/MySQL/Pivot_table

http://buysql.com/mysql/14-how-to-automate-pivot-tables.html

1 个答案:

答案 0 :(得分:0)

Select group_concat(Table.column1) as anything, 
group_concat(Table.column2 separator ';') 
AS Anything2, Table.`column3`
FROM Table
group by Table.column3;

Alter TABLE Table ADD 
  `newcolumn1` varchar(100) DEFAULT '' after `column3`; 
Alter TABLE MB ADD 
  `newcolumn2` varchar(500) DEFAULT '' after `newcolumn1`;

UPDATE Table SET
    `newcolumn1` = IF ( 
        LOCATE(',', column1) >0,
        SUBSTRING(column1, 1,LOCATE(',', column1)-1),
        column1
),
    `newcolumn2` = IF( 
        LOCATE(',', column1) > 0,
        SUBSTRING(column1, LOCATE(',', column1)+1),
        ''); 

UPDATE Table SET 
    newcolumn2 = SUBSTRING_INDEX(newcolumn2, ',', 1);
UPDATE Table SET 
    newcolumn3 = SUBSTRING_INDEX(newcolumn3, ',', 1);

此代码完全符合上面我想要的格式。