sql >> Databasteknik >  >> RDS >> Mysql

mysql pivottabell med strängvärden

Beroende på versionen av mysql du använder, här är ett tillvägagångssätt som skapar ett row_number per grupp och sedan använda conditional aggregation grupperad efter det radnumret:

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

Eftersom du använder en äldre version av mysql måste du använda user-defined variables för att fastställa radnumret. Resten fungerar sedan likadant. Här är ett exempel:

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


  1. Hur hoppar man över tomma data i MySQL?

  2. Flera frågor körs i java i en enda sats

  3. Mysql-utskrifter hjälper istället för att ansluta till servern

  4. Användbara frågor om oracle EBS lösenords utgång/policy/inställningar