如何对列中的重复行值进行分组

时间:2013-07-16 13:17:40

标签: mysql pivot-table

t_no name value
1    a     45
1    b     23
1    c     5
1    a     12
1    b     99
1    c     6

我需要将上表显示为

no  name value1 value2
1   a    45      12
1   b    23      99
1   c    5       6

2 个答案:

答案 0 :(得分:1)

您无法使用脚本语言在mysql中创建动态列,也可以使用group_concat将它们放在一列中:

  SELECT to_no, name, GROUP_CONCAT(value) 
  FROM table GROUP BY to_no, name

结果:

 no  name value
 1   a    45,12
 1   b    23,99
 1   c    5,6

答案 1 :(得分:0)

MySQL没有数据透视功能,但您可以使用带有CASE表达式的聚合函数。由于每个t_noname都有多个值,因此您可以使用用户定义的变量为每组值分配行号:

select t_no, name,
  max(case when rn=1 then value end) value1,
  max(case when rn=2 then value end) value2
from
(
  select t_no, name, value, 
    @rn:=case when @prev=t_no and @c=name then @rn else 0 end +1 rn, 
    @prev:=t_no,
    @c:=name
  from yourtable
  cross join (select @rn:=0, @prev:=0, @c:=null) c
  order by t_no, name
) d
group by t_no, name
order by t_no, name;

请参阅SQL Fiddle with Demo