sql >> Database >  >> RDS >> Mysql

SQL draait de kolomwaarden

U kunt vensterfuncties en voorwaardelijke aggregatie gebruiken:

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

De subquery rangschikt personen met hetzelfde beroep op naam. U kunt die informatie vervolgens gebruiken om de rijen te genereren en toegang te krijgen tot de bijbehorende naam voor elk beroep met een voorwaardelijk aggregaat.

Zonder vensterfuncties is het anders. Als uw gegevens niet te groot zijn, emuleert één optie het rijnummer met een subquery:

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. PHP MYSQL - Vul genummerde rijen in HTML-tabel op basis van of ze overeenkomen met rijnummer

  2. Hoe een JSON-bestand in een SQL Server-tabel te importeren

  3. PostgreSQL-deadlocks vermijden bij het uitvoeren van bulkupdate- en verwijderingsbewerkingen

  4. Is er een manier om een ​​voorbereide query te zien zoals deze in de database wordt uitgevoerd?