我有一张表格,其中列出了填写到表单中的所有信息。每个表单条目将所有信息放入同一列,另一列为field_id(这让我知道输入信息的确切位置)。因此,如果表单有8个输入字段,则输入的所有信息都在一列中,并且与输入的字段对应的field_id位于另一个字段中。
我现在正在重建数据库以使系统的这个混乱更有用,但我需要保留所有先前输入的数据。如何根据field_id列将输入信息的8行信息组合到新表中的单行中?
因此,如果名称/地址/电话/电子邮件/传真/母亲/父亲/宠物是新表的列,但每个的信息都存储在原始表中的一列中,其中field_ids为1到8在另一栏中,我怎么能这样做?
编辑:更清楚
表1结构: ID / meta_value / FIELD_ID / entry_id / CREATED_DATE
表2结构: ID /名称/地址/电话/电子邮件/传真/妈妈/爸爸/宠物
答案 0 :(得分:2)
您可以使用MAX
和CASE
执行此操作。不知道你的表格结构,我只想举个例子:
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