MySQL,将数据从行移动到列

时间:2013-01-11 19:23:10

标签: mysql select group-by pivot-table

我有一个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)。

我宁愿说“IF fieldid = 1然后将'数据'移动到new_table.column1”,但我对此怎么说都没有任何想法。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

怎么样:

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

答案 1 :(得分: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