2013-01-11 36 views
1

我有一個具有以下數據的MySQL表:的MySQL,來自行數據移動到列

id userid fieldid data 
-- ------ ------- ---- 
1 186  1   London 
2 186  3   Accountant 
3 186  5   Joe Jones 
4 206  1   Paris 
5 206  5   Mark Smith 
6 210  1   Berlin 
7 210  2   0020 
8 210  3   Farmer 
9 210  4   000-000-0000 
10 210  5   Bill Johnson 

我想結束了與格式化成數據的另一個表基於用戶ID的行:

userid Region Acct Title   Phone   Name 
------ ------ ---- -----   -----   ---- 
    186 London NULL Accountant NULL   Joe Jones 
    206 Paris  NULL NULL   NULL   Mark Smith 
    210 Berlin 0020 Farmer  000-000-0000 Bill Johnson 

我不需要SELECT語句......我知道如何使用GROUP_CONCAT查看數據。我正在談論另一個表格(也許是一個虛擬表格?)與行中的數據。

我不介意引用行名和列名的腳本,但我不想引用特定的數據字段(即 - 如果row_data = London移動到column1)。

我寧願說一些類似於「如果fieldid = 1,然後將'data'移動到new_table.column1」,但我沒有絲毫的想法如何說。

任何人都可以幫忙嗎?

+0

那麼,如果你知道如何使用select語句做到這一點,然後用同樣的選擇和數據推送到臨時表或物理表(無論你需要什麼)。沒有? – Learner

+0

你有一張引用每個FieldId的表格,你知道這個名字應該是什麼嗎?你真的想要將這些數據存儲在表格中嗎?您可以根據需要進行轉換。 – Taryn

+0

問題是我試圖在腳本中使用「WHERE region = London」,但是這是過濾出所有其他行(如姓名和電話號碼)。我不知道如何以任何其他方式做到這一點,除了創建一個表,其中一切都在一個單獨的列而不是堆疊在一行中。 –

回答

0

試試這個:

CREATE TABLE `temptable` AS 
SELECT userid, MAX(IF(fieldid =1, DATA, NULL)) Region, 
     MAX(IF(fieldid=2, DATA, NULL)) Acct, MAX(IF(fieldid =3, DATA, NULL)) Title, 
     MAX(IF(fieldid=4, DATA, NULL)) Phone, MAX(IF(fieldid =5, DATA, NULL)) `Name` 
FROM tablename 
GROUP BY userid 
+0

這工作完美! –

0

這個怎麼樣:

create table mynewtable as 
(the select statement you already know) 
+0

此聲明將每個項目都拼湊成一列。我希望每個行項目都在一個單獨的列中。 –

+0

好 - 我以爲你說你已經知道sql做那部分 - 對不起 – Randy