MySQL - 如何将一个表中不同行的信息组合成另一个表中的一行?

时间:2013-05-30 17:42:41

标签: mysql database rows

我有一张表格,其中列出了填写到表单中的所有信息。每个表单条目将所有信息放入同一列,另一列为field_id(这让我知道输入信息的确切位置)。因此,如果表单有8个输入字段,则输入的所有信息都在一列中,并且与输入的字段对应的field_id位于另一个字段中。

我现在正在重建数据库以使系统的这个混乱更有用,但我需要保留所有先前输入的数据。如何根据field_id列将输入信息的8行信息组合到新表中的单行中?

因此,如果名称/地址/电话/电子邮件/传真/母亲/父亲/宠物是新表的列,但每个的信息都存储在原始表中的一列中,其中field_ids为1到8在另一栏中,我怎么能这样做?

编辑:更清楚

表1结构: ID / meta_value / FIELD_ID / entry_id / CREATED_DATE

表2结构: ID /名称/地址/电话/电子邮件/传真/妈妈/爸爸/宠物

2 个答案:

答案 0 :(得分:2)

您可以使用MAXCASE执行此操作。不知道你的表格结构,我只想举个例子:

SELECT id,
   MAX(CASE WHEN field_id = 1 THEN meta_value END) 'Name',
   MAX(CASE WHEN field_id = 2 THEN meta_value END) 'Address',
   MAX(CASE WHEN field_id = 3 THEN meta_value END) 'Phone',
   ...
FROM YourTable
GROUP BY id

这会将PIVOT您的结果放入包含多列的单行中。

答案 1 :(得分:1)

好吧,如果我理解正确,你可以这样做:

select
    id,
    (select meta_value from Table1 t2 where field_id = 1 and t2.id = t1.id) as name,
    (select meta_value from Table1 t2 where field_id = 2 and t2.id = t1.id) as address,
    ...
    (select meta_value from Table1 t2 where field_id = 8 and t2.id = t1.id) as pet
from Table1 t1
group by id