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
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
您不能单独在 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
MySQL 没有数据透视函数,但您可以使用带有 CASE 表达式的聚合函数。由于每个t_no
and都有多个值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;