Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Pivot-Tabelle mit String-Werten

Abhängig von der Version von mysql Sie verwenden, hier ist ein Ansatz zur Einrichtung einer row_number pro Gruppe, dann mit conditional aggregation gruppiert nach dieser Zeilennummer:

select 
    rn, 
    max(case when stuff = 'bag' then name end) 'bag',
    max(case when stuff = 'book' then name end) 'book',
    max(case when stuff = 'shoes' then name end) 'shoes' 
from (
  select *, row_number() over (partition by stuff order by name) rn
  from stuff_table
) t
group by rn

Da Sie eine ältere Version von mysql verwenden , müssen Sie user-defined variables verwenden um die Zeilennummer zu ermitteln. Der Rest funktioniert dann genauso. Hier ist ein Beispiel:

select 
    rn, 
    max(case when stuff = 'bag' then name end) 'bag',
    max(case when stuff = 'book' then name end) 'book',
    max(case when stuff = 'shoes' then name end) 'shoes' 
from (
  select *, 
  ( case stuff 
         when @curStuff
         then @curRow := @curRow + 1 
         else @curRow := 1 and @curStuff := stuff 
   end
  ) + 1 AS rn
  from stuff_table, (select @curRow := 0, @curStuff := '') r
  order by stuff
) t
group by rn