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

SQL pivotuje hodnoty sloupců

Můžete použít funkce okna a podmíněnou agregaci:

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

Poddotaz seřadí osoby se stejným povoláním podle jména. Tyto informace pak můžete použít ke generování řádků a získat přístup k odpovídajícímu názvu pro každé povolání s podmíněným agregátem.

Bez okenních funkcí je to jiné. Pokud vaše data nejsou příliš velká, jedna možnost emuluje číslo řádku s poddotazem:

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. Pokud existují dvě stejná pole, vložte jinou aktualizaci

  2. Najít články, kde pole

  3. java.lang.ClassCastException:oracle.sql.TIMESTAMP nelze přenést do java.sql.Timestamp

  4. Architektura a ladění paměti v PostgreSQL databázích