【发布时间】:2014-08-08 07:35:49
【问题描述】:
我正在寻找一种构建给定表格的方法:
TABLE: group TABLE: person
------------------------- -------------------------------------------------
| Group_id | Group_name | | Person_id | Person_name | Person_fid | Group_id |
------------------------- -------------------------------------------------
| 1 | Group44 | | 1 | John | 2 | 1 |
------------------------- -------------------------------------------------
| 2 | Best Group | | 2 | George | 1 | 1 |
------------------------- -------------------------------------------------
| 3 | Peter | 2 | 2 |
(表 person 有额外的列,如 person_nickname、person_status 等)
变成这样的结果:(组名、person_fid1 列、person_fid2 列)
-------------------------------------------------------------------
| Groupname | fid1_pname | fid 1_pstat | fid2_pname | fid2_pstat |
-------------------------------------------------------------------
| Group44 | George | 1 | John | 0 |
-------------------------------------------------------------------
| Best Group | NULL | NULL | Peter | 1 |
-------------------------------------------------------------------
将有 6 个不同的 Person_fid,我需要从中生成列。
如果一个组没有具有特定fid 的人,它可以为这些列显示NULL。 有没有办法做到这一点?
我尝试过使用:
SELECT group.name, MAX(CASE WHEN person.Person_fid = 1 THEN |get column infos|
ELSE NULL, NULL, NULL END) 3 columns fid1,
MAX(CASE WHEN person.Person_fid = 2 THEN |get column infos|
ELSE NULL, NULL, NULL END) 3 columns fid2
但我不能走得太远,因为我什至不知道如何搜索这种东西。
【问题讨论】:
-
group是保留字。因此,对于表/列标识符来说,这是一个糟糕的选择。也就是说,你为什么要这样做? -
fid 1_pstat哪些列值?你想在单行显示 6 个人吗 -
@Strawberry 我知道这很奇怪,但整个结构最初并不是为了这样的东西而建造的。 (多人)
-
@Sathish 是的 6 个人在一个列中提供了他们的信息,但我已经让一切正常(感谢 Jacky Chengs 的回答)。
-
@OnionHull 实际上,您在寻找比 Jacky 的更优雅的解决方案的正确轨道上 - 尽管我怀疑接受的解决方案如果比您的替代方案快一点。另外,仅供参考,在现代英语中,“Thank a bundle”已成为“That was very unhelpful”的成语!!
标签: mysql pivot multiple-columns