@NeuraLink

Как объединить 2 записи в одну по признаку?

Не знаю правильно ли я сформулировал вопрос, но надеюсь по картинкам поймете.
Я знаю чего хочу, но как это правильно сформулировать, опираясь на термины SQL - хз, поэтому поиск в гугле не дал никаких результатов.

Есть таблица T (1 рис.) . В ней 2 записи ссылающиеся на один и тот же T.office_id. Как составить запрос, чтобы получилось как на рис 2 ? Нужно чтобы на выводе была уже одна запись с новыми столбцами T.employee_id_first и T.employee_id_second и соответственно T.office_id

619680c7bb77b143382373.png

619681457ac25265109705.png

Буду рад любой помощи.
  • Вопрос задан
  • 333 просмотра
Решения вопроса 2
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Из базы напрямую можно получить массив:
select 
  office_id,
  json_arrayagg(employee_id) employee_ids
from t 
group by office_id;


MySQL json_arrayagg fiddle

+===========+==============+
| office_id | employee_ids |
+===========+==============+
| 1         | [1, 2]       |
+-----------+--------------+
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега MySQL
SELECT 
    ANY_VALUE(id) AS 'id',
    office_id, 
    IF(
        POSITION(',' IN GROUP_CONCAT(employee_id))=0, 
        GROUP_CONCAT(employee_id), 
        SUBSTR(GROUP_CONCAT(employee_id), 1, POSITION(',' IN GROUP_CONCAT(employee_id))-1)
    ) AS 'employee_id_first',
    IF(
        POSITION(',' IN GROUP_CONCAT(employee_id))=0, 
        NULL, 
        SUBSTR(
            RIGHT(GROUP_CONCAT(employee_id), LENGTH(GROUP_CONCAT(employee_id))-POSITION(',' IN GROUP_CONCAT(employee_id))),
            1,
            POSITION(',' IN RIGHT(GROUP_CONCAT(employee_id), LENGTH(GROUP_CONCAT(employee_id))-POSITION(',' IN GROUP_CONCAT(employee_id))))-1
        )
    ) AS 'employee_id_second'
FROM 
    t
GROUP BY
    office_id
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы