选择不同的值作为同一行中的不同列

时间:2014-09-08 15:07:07

标签: mysql sql

正如标题所说,我想在同一行中选择不同的值作为不同的列

示例:

ID    CATEGORY
1     5
1     6
1     8
2     5
2     7
3     5

我想要这样的事情:

ID     CATEGORY1    CATEGORY2    CATEGORY3
1      5            6            8
2      5            7            
3      5

只有一个查询可用吗?

1 个答案:

答案 0 :(得分:1)

获得此类内容的最简单方法是使用group_concat()

select id, group_concat(category order by category)
from table t
group by id;

但是,它会创建一个附加列,其中包含值列表,而不是三列。这是否足以满足您的目的?

如果您想要三个额外的列,那么您将需要一个更复杂的语句。以下是使用变量的一种方法:

select id,
       max(case when seqnum = 1 then category end) as category1,
       max(case when seqnum = 2 then category end) as category2,
       max(case when seqnum = 3 then category end) as category3
from (select t.*,
             (@rn := if(@id = id, @rn + 1,
                        if(@id := id, 1, 1)
                       )
             ) as seqnum
      from table t cross join
           (select @rn := 0, @id := NULL) vars
      order by id, category
     ) t
group by id;