SQL объединить две строки с одинаковым идентификатором, но разными значениями столбца

Я пытаюсь объединить разные строки в одну, когда они имеют одинаковый идентификатор, но разные значения столбцов.

    (table1)

    id       colour

    1        red
    1        blue
    2        green
    2        red

Я хотел бы, чтобы это было объединено, чтобы результат был:

    id     colour1    colour2

    1      red        blue
    2      green      red

Количество цветов не ограничено. Он может варьироваться в зависимости от идентификатора.

Любая помощь будет оценена по достоинству! Заранее спасибо.


person John Doe    schedule 22.10.2019    source источник
comment
Почему цвет1 = красный, а цвет2 = синий, а не наоборот? Таблицы/результаты SQL по определению ANSI SQL неупорядочены   -  person Raymond Nijland    schedule 22.10.2019
comment
.. также с текущим набором данных также невозможно, вам нужно иметь id |colour|position -> 1|red|1, 1|blue|2 ....   -  person Raymond Nijland    schedule 22.10.2019
comment
Виноват. Порядок может быть любым.   -  person John Doe    schedule 22.10.2019
comment
Возможный дубликат динамической сводной таблицы MySQL   -  person Raymond Nijland    schedule 22.10.2019


Ответы (1)


Это будет работать для вашего конкретного примера

select left(colours,locate(',',colours)-1) as colour1 , right(colours, length(colours)- locate(',',colours)) as colour2 from (select id, group_concat(colour) as colours from table1 group by id) concatenation

не очень общий или надежный.

Если бы набор значений (цветов) был фиксированным, я бы предпочел повернуть его следующим образом:

select id, sum(RED) as RED , sum(GREEN) as GREEN , sum(BLUE) as BLUE from (select id , colour='red' as RED , colour='green' as GREEN , colour='blue' as BLUE from table1) coded group by id;

но это был не тот формат вывода, который вы запрашивали.

person sonam_zangmo    schedule 22.10.2019