Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL przestawia wartości kolumn

Możesz użyć funkcji okna i agregacji warunkowej:

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

Podzapytanie klasyfikuje osoby o tym samym zawodzie według nazwiska. Możesz następnie użyć tych informacji do wygenerowania wierszy i uzyskać dostęp do odpowiedniej nazwy dla każdego zawodu za pomocą agregacji warunkowej.

Bez funkcji okien jest inaczej. Jeśli twoje dane nie są zbyt duże, jedna opcja emuluje numer wiersza z podzapytaniem:

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. Usuń od wielu do wielu relacji w MySQL

  2. Czy mogę edytować obiekt mysqli_result w php?

  3. Wybierz X linii zaczynających się od linii Y

  4. Sprawdzanie pustego pola za pomocą MySQL

  5. czy lepiej jest uciec/zakodować dane wejściowe użytkownika przed przechowywaniem ich w bazie danych, czy przechowywać je tak, jak są w bazie danych i usuwać je podczas pobierania?