/ / Konwersja wierszy SQL do kolumn - mysql, sql

Konwertuj wiersze SQL na kolumny - mysql, sql

To jest mój stół:

id | num | comment
---+-----+--------
3 |  10 | hello
3 |  20 | pls
3 |  30 | respond
7 |  10 | leet
7 |  20 | hax
7 |  30 | zor

Jak mogę zapytać w ten sposób:

id | first | second | third
---+-------+--------+--------
3 | hello |  pls   | respond
7 | leet  |  hax   | zor

Odpowiedzi:

2 dla odpowiedzi № 1

W przypadku, gdy kolumna num nierzetelnie zawsze zaczynaj od 10, a zwiększaj o 10, aby ustalić numer wiersza, który zostanie ponownie uruchomiony po każdej zmianie identyfikatora, w ten sposób możesz użyć liczników w połączeniu z agregacją warunkową, aby wyświetlić każdy komentarz. Następujące czynności mogą to zrobić do 10 komentarzy na identyfikator, a kolumna NUM nie musi być 10/20/30/40/50/60/70/80/90 (może to być cokolwiek).

Jeśli kolumna NUM niezawodnie zaczyna się od 10 i wznosi się o 10, to pytanie zostało zadane i udzielono odpowiedzi: Jak przestawiać wiersze w kolumny (obracanie niestandardowe)

select id,
max(case when row_number = 1 then comment else null end) as c01,
max(case when row_number = 2 then comment else null end) as c02,
max(case when row_number = 3 then comment else null end) as c03,
max(case when row_number = 4 then comment else null end) as c04,
max(case when row_number = 5 then comment else null end) as c05,
max(case when row_number = 6 then comment else null end) as c06,
max(case when row_number = 7 then comment else null end) as c07,
max(case when row_number = 8 then comment else null end) as c08,
max(case when row_number = 9 then comment else null end) as c09,
max(case when row_number = 10 then comment else null end) as c10
from(
select @row_number := case when @prev_val = id then @row_number+1 else 1 end as row_number,
id,
comment,
@prev_val:=id as prev_val
from tbl, (select @row_number:=0,@prev_val:="") x
order by id, num) x
group by id
order by id