合并行并将其转换为列

时间:2015-04-29 14:03:32

标签: mysql

我有一个恰好已经设置的数据列表:

entryID    fieldID    Value
100        1          John
100        2          Smith
100        3          USA
101        1          Jane
101        2          Doe
101        3          USA

它的工作方式是,当创建“票证”时,它为该票证中的所有数据分配一个entryID,但每个字段也有自己的fieldID。因此,名字始终是1的fieldID,姓氏是2,等等。 我需要做的是创建一个如下所示的视图:

First Name    Last Name    Country
John          Smith        USA
Jane          Doe          USA

我需要能够在MySQL中执行此操作,而不是SQL或excel,因为其他一些类似的问题已得到解决。

1 个答案:

答案 0 :(得分:0)

真的没有一种简单的方法可以在纯MySQL中实现这一点。 您需要对要显示为列的值调用JOIN。

例如:

SELECT 
     FirstName.Value AS 'First Name', 
     LastName.Value AS 'Last Name', 
     Country.Value AS 'Country'
FROM table_name t1
LEFT JOIN table_name AS FirstName
ON t1.entryID = FirstName.entryID AND FirstName.fieldID = 1
LEFT JOIN table_name AS LastName
ON t1.entryID = LastName.entryID AND LastName.fieldID = 2
LEFT JOIN table_name AS Country
ON t1.entryID = Country.entryID AND Country.fieldID = 3
GROUP BY t1.entryID   

小提琴http://sqlfiddle.com/#!9/dcfc4/1

您应该基本上转换表格,以便按照您希望的方式反映数据。

如果您允许成员加入多个国家/地区,那么创建会员和国家/地区的ManyToMany关系会更有效。

成员

id | first_name | last_name
 1 | John       | Doe
 2 | Jane       | Doe

国家

id | name
 1 | USA
 2 | Germany

member_country

member | country
  1    | 1
  2    | 2

SELECT m.first_name AS 'First Name', m.last_name AS 'Last Name', c.name AS Country
FROM members AS m
JOIN member_country AS mc
ON m.id = mc.member
JOIN country AS c
ON c.id = mc.country

http://sqlfiddle.com/#!9/d2768/1

相关问题