2013-10-24 3 views
2

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

Текущих данных Таблицы

ID, Address, Price, Date 
1, ABC, 25$, 2013-10-20 
2, ABC1, 35$, 2013-10-20 
3, ABC2, 45$, 2013-10-20 
4, ABC3, 55$, 2013-10-20 
5, ABC4, 65$, 2013-10-20 
6, ABC, 25$, 2013-10-21 
7, ABC1, 35$, 2013-10-21 
8, ABC2, 25$, 2013-10-21 
9, ABC3, 115$, 2013-10-21 
10, ABC4, 65$, 2013-10-21 
11, ABC, 25$, 2013-10-22 
12, ABC1, 35$, 2013-10-22 
13, ABC2, 345$, 2013-10-22 
14, ABC3, 255$, 2013-10-22 
15, ABC4, 65$, 2013-10-24 

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

Address, 2013-10-20, 2013-10-21, 2013-10-22 
ABC , 25$  , 25$  , 25$ 
ABC1 , 35$  , 35$  , 35$ 
ABC2 , 45$  , 25$  , 345$ 
ABC3 , 55$  , 115$  , 225$ 
ABC4 , 65$  , 65$  , 25$ 

Я хочу на ежедневной основе новый столбец, добавленный к вышеуказанным данным, чтобы я мог сгенерировать отчет на нем. Если есть какое-то решение с PHP, также просьба ссылаться тоже.

+0

возможно дубликат [MySQL динамического-шарниром] (http://stackoverflow.com/questions/12630128/mysql-dynamic-pivot) –

+0

вы смотрели на 'GROUP_CONCAT' .. ??? –

+0

Дорогой вы можете привести мне пример, поскольку я новичок, поэтому я не понимаю пример [MySQL dynamic-pivot] (http://stackoverflow.com/questions/12630128/mysql-dynamic-pivot) @ RaphaëlAlthaus – user2915328

ответ

1
SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'MAX(CASE WHEN Date = ''', 
     Date, 
     ''' then Price end) AS `', Date, '`') 
    ORDER BY Date) INTO @sql 
FROM Table; 
SET @sql = CONCAT('SELECT Address, ', @sql, ' FROM Table GROUP BY Address'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

Пожалуйста, добавьте некоторое описание для поддержки фрагмента кода –

0

Вы можете использовать этот код, который был мной создан.

SET @sql = NULL; 
    select GROUP_CONCAT(DISTINCT 
       CONCAT(' ROUND(SUM(CASE WHEN DATE_FORMAT(Date, ''%b %y'')=''', 
         DATE_FORMAT(Date, '%b %y'), 
         ''' THEN Price ELSE 0 END)) AS ''', 
         DATE_FORMAT(Date, '%b %y'), '''' 
        ) 
        ORDER BY Date) 
        INTO @sql 
    from Table ; 
    SET @sql = CONCAT('SELECT Address, ', @sql, ' FROM Table GROUP BY Address'); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
Смежные вопросы