sql >> Database teknologi >  >> RDS >> Mysql

SQL pivot kolonneværdierne

Du kan bruge vinduesfunktioner og betinget 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

Underforespørgslen rangerer personer med samme erhverv efter navn. Du kan derefter bruge disse oplysninger til at generere rækkerne og få adgang til det tilsvarende navn for hver besættelse med et betinget aggregat.

Uden vinduesfunktioner er det anderledes. Hvis dine data ikke er for store, emulerer én mulighed rækkenummer med en underforespørgsel:

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. hvordan man viser hide html-tabelrække baseret på php-tilstand

  2. Brug Like i MySQL til søgeoperationer ved hjælp af mønster

  3. Er dette en mulig Oracle-fejl, eller mangler jeg noget?

  4. mysql vælg indhold omkring søgeord