2015-07-15 4 views
1

У меня есть таблица, в которой хранятся дата и цена покупок.Выберите несколько лет в отдельных столбцах

Например

date  | price 
--------------------- 
2014-1-12 | 6.50 
2014-2-34 | 10.99 
2015-1-01 | 3.22 
2015-2-14 | 4.12 

И так далее.

Что я хочу достичь: запрос, который выводит СУММ из покупок, сгруппированных в месяц в году.

ВАЖНО. Тем не менее, мне нужно иметь разные годы в COLUMNS, чтобы иметь возможность составлять график с отдельной строкой для каждого года. Таким образом, мне нужна следующая информация:

MONTH | 2014 | 2015 
JAN | 123.23 | 99.1 
FEB | 457.00 | 122.00 
MAR | 299.99 | 789.12 
... | 
NOV | 333.33 | 10.99 
DEC | 100.00 | 20.10 

Возможно ли это? Я довольно долго искал такие вещи, как «год за годом» и т. Д. Но я ничего не мог найти.

Любая помощь очень ценится!

+0

Смотрите, если это похоже: http://stackoverflow.com/questions/7674786/mysql-pivot-table – PaulF

+0

я не мог бы иметь время, чтобы поставить решение вместе, но я хотел сделать несколько комментариев. Во-первых, ваш запрос будет «прерывистым» в заявлении простого выбора, потому что вы не можете (без использования диалогов конкретных опорных точек) использовать простую функцию для динамического добавления столбцов по прошествии лет. Вы нормально меняете это каждый год? В качестве альтернативы было бы относительно тривиально писать запрос, который группируется по годам и месяцам (с выражением case, чтобы изменить его на текст), а затем отформатировать его на стороне приложения. Вы открываете какой-либо код приложения? Какой язык? –

+0

Это будет просто, если вы ожидаете иметь столбцы для «текущего года», «год-1», «год-2» ... т. Е. Относительно текущей даты. – i486

ответ

0

Просто используйте условную агрегацию:

select monthname(date) as mon, 
     sum(case when year(date) = 2014 then price else 0 end) as price_2014, 
     sum(case when year(date) = 2015 then price else 0 end) as price_2015 
from table t 
group by monthname(date) 
order by max(month(date)); 
+0

Большое вам спасибо. Это именно то, что мне нужно. Единственное, что мне нужно сделать сейчас - это добавить новый случай на долгие годы - легко. –

Смежные вопросы