Печать
Просмотров: 6690
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Давненько ничего не писал. Времени как то не хватает, но все же нашел минутку что бы написать небольшой пример по выборке данных из MySQL. 

 

 Допустим есть некий набор данных из которого надо выбрать данные раскидав их по дням. Можно сделать просто группировку по датам,  но даты будут в  строках, а зачастую требуется что бы данные были в столбцах.

Чесно говоря метод PIVOT  в MySql я не нашел. Но встретил на просторах интернета другое решение, может не столько элегантное но вполне себе работоспособное. Суть есть в том что бы построить подзапрос с перечеслением дат, а затем сгруппировать все по нужному столбцу.

Для примера, есть такая таблица,в нее заносится код детали, количество деталей, операция, дата выполнения.

tbl1

Для выборки данных с разбивкой по датам делаем следующий запрос. 

 

SELECT GROUP_CONCAT(DISTINCT CONCAT(' sum( if(oper_date = "',oper_date,'", oper_kolvo,null)) as  "', DATE_FORMAT( oper_date,'%d.%m.%Y' ),'"'))
 INTO @sql
FROM subprocess WHERE det_id =8;
set @sql = CONCAT('SELECT oper_name as `Операция` ,',@sql,'  FROM subprocess where det_id = 8 group by oper_name order by oper_name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

 Как результат данный отобразятся в такой виде. Думай не составить труда передалать запрос под свои потребности.

tbl2