Це мій стіл:
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