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