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 にはピボット関数がありませんが、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;
デモで SQL Fiddle を参照してください