sql >> Databasteknik >  >> RDS >> Mysql

SQL pivotera kolumnvärdena

Du kan använda fönsterfunktioner och villkorlig aggregering:

select
    rn,
    max(case when occupation = 'Doctor' then name end) doctor,
    max(case when occupation = 'Singer' then name end) singer,
    max(case when occupation = 'Actor'  then name end) actor
from (
    select t.*, row_number() over(partition by occupation order by name) rn
    from mytable t
)
group by rn

Underfrågan rangordnar personer som har samma sysselsättning efter namn. Du kan sedan använda den informationen för att generera raderna och komma åt motsvarande namn för varje yrke med ett villkorligt aggregat.

Utan fönsterfunktioner är det annorlunda. Om din data inte är för stor, emulerar ett alternativ radnummer med en underfråga:

select
    rn,
    max(case when occupation = 'Doctor' then name end) doctor,
    max(case when occupation = 'Singer' then name end) singer,
    max(case when occupation = 'Actor'  then name end) actor
from (
    select t.*, 
        (
            select count(*) 
            from mytable t1 
            where t1.occupation = t.occupation and t1.name <= t.name
        ) rn
    from mytable t
)
group by rn



  1. Importera MS ACCESS DB till mySql?

  2. Förlorade anslutningen till MySQL-servern när jag försökte ansluta till fjärransluten MySQL-server

  3. Jag behöver en lista över länder i T-SQL

  4. Rails + Postgres:Returnerar inte tidszoninformation på kolumn från sammanfogad tabell