Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL pivot nilai kolom

Anda dapat menggunakan fungsi jendela dan agregasi bersyarat:

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

Subquery memberi peringkat orang-orang yang memiliki penghuni yang sama berdasarkan nama. Anda kemudian dapat menggunakan informasi tersebut untuk menghasilkan baris, dan mengakses nama yang sesuai untuk setiap pekerjaan dengan agregat bersyarat.

Tanpa fungsi jendela, itu berbeda. Jika data Anda tidak terlalu besar, satu opsi mengemulasi nomor baris dengan subkueri:

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. Instans MySql localhost vs Amazon RDS

  2. Kapan menggunakan LEFT JOIN dan kapan menggunakan INNER JOIN?

  3. Masukkan Data ke dalam Database MySQL

  4. AttributeError:objek 'tuple' tidak memiliki atribut 'encode' - MySQLdb Python

  5. Karakter aneh di mysql dbase