-1
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
4

2 回答 2

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
于 2013-07-16T13:22:45.720 回答
0

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

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

于 2013-07-16T13:34:37.690 回答