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
答案 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_no
和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;