Mysql Изменить положение строк в столбцах из повторных данных

0

Мне нужно изменить строки из повторяющихся идентификаторов в столбцы.
Пример объяснит мне мою проблему

Что я имею:

+----+-----------+-------+
| 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       |
+----+---------+---------+---------+---------+
  • 0
    Вместо этого, серьезно подумайте над обработкой проблем отображения данных в коде приложения.
Теги:
select
join

1 ответ

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

dbfiddle demo

если в значениях id есть "пробелы", то cn может быть вычислен с использованием самосоединения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню