如何从单个列创建两个列输出

时间:2012-02-19 01:11:04

标签: mysql sql pivot

我猜这是一个菜鸟问题所以请耐心等待。我在mySQL表中有一个列,其中包含名字和姓氏以及其他数据(参见下表)。

fid | uid | value
 5  |  1  | John
 6  |  1  | Doe
 7  |  1  | some other data
 5  |  2  | Jane
 6  |  2  | Doe
 7  |  2  | some other data

我想要做的是创建一个查询,在这里我将名字和姓氏分成各自的列用于报告目的(如下所示)。

First Name | Last Name
  John     |   Doe
  Jane     |   Doe

我之前没有看过这个问题,也没有能够使用Google(可能使用错误的关键字)。我认为这相对简单,但它让我不知所措。

感谢。

3 个答案:

答案 0 :(得分:3)

你只需要用这样的东西加入表格:

select first_name.value, last_name.value
from your_table first_name
join your_table last_name on first_name.uid = last_name.uid
where first_name.fid = 5
  and last_name.fid  = 6

只要为表的每个实例使用不同的别名,就可以将表连接到自身或多次连接同一个表。

答案 1 :(得分:3)

不需要自联接:

  SELECT MAX(CASE WHEN yt.fid = 5 THEN yt.value ELSE NULL END) AS firstname,
         MAX(CASE WHEN yt.fid = 6 THEN yt.value ELSE NULL END) AS lastname
    FROM YOUR_TABLE yt
GROUP BY yt.uid

答案 2 :(得分:2)

你可以像这样在uid上进行自我加入:

select 
  t1.value as 'First Name', 
  t2.value as 'Last Name' 
from 
  <table_name> t1 join 
  <table_name> t2 on t1.uid = t2.uid 
where 
  t1.fid = 5 and 
  t2.fid = 6;

为了加快速度,如果还没有,请考虑在fid上添加索引,如下所示:

create index FID_IDX on <table_name> (fid);

这会阻止mysql使用连接缓冲区来解析查询,而是会通过索引。

但是,索引会减慢对此表的插入和更新的影响。如果写入性能比读取更重要,则不要添加它。