/ / Перетворити рядки SQL до стовпчиків - mysql, sql

Перетворення рядків SQL до стовпчиків - mysql, sql

Це мій стіл:

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

Як я можу запитати його таким чином:

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

Відповіді:

2 для відповіді № 1

У тому випадку, якщо колонка num не працюєнадійно завжди починається з 10 і піднімається на 10, ви можете використовувати наступне, щоб встановити номер рядка, який перезавантажується при кожній зміні ідентифікатора, таким чином ви можете використовувати rownumbers разом з умовною агрегацією, щоб показати кожен коментар. Наведене нижче можна зробити до 10 коментарів за ідентифікатор, а стовпець NUM не повинен бути 10/20/30/40/50/60/70/80/90 (це може бути що завгодно).

Якщо стовпчик NUM надійно починається з 10 і піднімається на 10, це запитання було задано та відповіли: Як повернути рядки в стовпці (користувацькі обертання)

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