Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL dinamiza os valores da coluna


Você pode usar funções de janela e agregação condicional:
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

A subconsulta classifica as pessoas com a mesma ocupação por nome. Você pode usar essas informações para gerar as linhas e acessar o nome correspondente para cada ocupação com um agregado condicional.

Sem funções de janela, é diferente. Se seus dados não forem muito grandes, uma opção emula o número da linha com uma subconsulta:
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