Сводная выборка из MySQL

247
26 ноября 2016, 20:17

Существует таблица MYSQL, которая имеет следующую структуру:

CREATE TABLE `data` (
    `ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `objectID` INT(10) UNSIGNED NOT NULL,
    `actionID` INT(10) UNSIGNED NOT NULL,
    `year` DATE NOT NULL,
    PRIMARY KEY (`ID`),
    UNIQUE INDEX `ID` (`ID`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

Со следующим содержимым:

ID    objectID    actionID    year
 1       1           1        2013
 2       2           3        2013
 3       1           7        2014
 4       2           3        2014
 5       1           4        2015
 6       2           2        2015

Я делаю запрос следующего вида:

SELECT
    objectID,
    CASE year WHEN "2010" THEN actionID ELSE 0 END as "2013",
    CASE year WHEN "2011" THEN actionID ELSE 0 END as "2014",
    CASE year WHEN "2012" THEN actionID ELSE 0 END as "2015"
FROM data

И получаю следующий ответ (возможны несколько различных actionID для objectID в одном году):

     objectID    2013    2014    2015
         1         1
         1                 7
         1                 8
         1                         2
         2         3
         2                 3
         2                         2

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

     objectID    2013    2014    2015
         1         1      7,8      2
         2         3       3       2

Или:

    objectID    2013    2014    2014    2015
         1         1      7       8       2
         2         3      3               2

При использовании GROUP BY objectID отображается только одна из строк на ряд:

     objectID    2013    2014    2015
         1         1
         2         3

Решение, устроившее меня, на основе совета Mike:

SELECT
    objectID,
    group_concat(
        DISTINCT CASE years WHEN "2013" THEN km_typeID END SEPARATOR '; '
    ) as "2013",
    group_concat(
        DISTINCT CASE years WHEN "2014" THEN km_typeID END SEPARATOR '; '
    ) as "2014",
    group_concat(
        DISTINCT CASE years WHEN "2015" THEN km_typeID END SEPARATOR '; '
    ) as "2015",
FROM data
GROUP BY objectID;
READ ALSO
Запрос к двум таблицам MySQL

Запрос к двум таблицам MySQL

Есть две таблиц

252
Проверка вхождения числа в строку

Проверка вхождения числа в строку

В таблице хранится строка вида '1,2,10,12,30'Здесь прописываются группы пользователя

258
Помогите отредактировать SQL-запрос

Помогите отредактировать SQL-запрос

Есть запрос выводящий все заказыВ таблице teh_otdel есть 6 отделов, и сейчас они все выводятся

246