Мне нужно изменить строки из повторяющихся идентификаторов в столбцы.
Пример объяснит мне мою проблему
Что я имею:
+----+-----------+-------+
| id | id_data | values|
+----+-----------+-------+
| 1 | 1 | data1 |
+----+-----------+-------+
| 2 | 1 | data2 |
+----+-----------+-------+
| 3 | 1 | data3 |
+----+-----------+-------+
| 4 | 2 | data4 |
+----+-----------+-------+
| 5 | 2 | data5 |
+----+-----------+-------+
Что я хочу:
+----+---------+---------+---------+---------+
| id | id_data | option1 | option2 | option3 |
+----+---------+---------+---------+---------+
| 1 | 1 | data1 | data2 | data3 |
| 2 | 2 | data4 | data5 | 0 |
+----+---------+---------+---------+---------+
Используйте условную агрегацию. Следующий код будет работать корректно только в том случае, если id
растет последовательно одним.
select t.id_data,
max(case when cn = 0 then values end) as option1,
max(case when cn = 1 then values end) as option2,
max(case when cn = 2 then values end) as option3
from
(
select *,
id - (select min(id) from data d2 where d1.id_data = d2.id_data) cn
from data d1
) t
group by t.id_data
если в значениях id
есть "пробелы", то cn
может быть вычислен с использованием самосоединения.