2014-03-27 73 views
0

我正在嘗試在MySQL工作臺中編寫一個數據透視表函數,並且我查看的許多地方都沒有超級相關。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中使用pivoting獲得過一些資源,但是我還沒有能夠獲得任何代碼的工作。

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

回答

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); 

此代碼實現正是我想以上的格式。