sql >> Databáze >  >> RDS >> Mysql

mysql kontingenční tabulka s řetězcovými hodnotami

V závislosti na verzi mysql který používáte, zde je jeden přístup k vytvoření row_number na skupinu a poté pomocí conditional aggregation seskupené podle tohoto čísla řádku:

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

Protože používáte starší verzi mysql , budete muset použít user-defined variables k určení čísla řádku. Zbytek pak funguje stejně. Zde je příklad:

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. Jak odstranit duplikáty ze seznamu odděleného čárkami podle regulárního výrazu v Oracle, ale nechci duplicitní hodnoty?

  2. Jak změnit neupravitelný/vygenerovaný kód v netbeans

  3. Jak mohu dále optimalizovat odvozený tabulkový dotaz, který funguje lépe než ekvivalent JOINed?

  4. MySQL se při nasazení EC2 s Rubber nepřipojí