-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

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;

デモで SQL Fiddle を参照してください

于 2013-07-16T13:34:37.690 に答える