Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL завърта стойностите на колоните

Можете да използвате прозоречни функции и условно агрегиране:

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

Подзаявката класира лицата с една и съща професия по име. След това можете да използвате тази информация, за да генерирате редовете и да получите достъп до съответното име за всяка професия с условен агрегат.

Без прозоречни функции е различно. Ако вашите данни не са твърде големи, една опция емулира номер на ред с подзаявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дизайн на БД:една голяма БД за всички клиенти или много малки БД

  2. Съхранение на IP адрес в MySQL база данни (IPv4 И IPv6)

  3. Свързване на wordpress блог с CodeIgniter View

  4. объркване с добавяне на 2 времеви стойности

  5. JDBC видео уроци