MySQL: динамические представления на основе значения года

0

Ниже приведена таблица ввода:

Входная таблица

|---------------------|------------------|
|      date           |        total     |
|---------------------|------------------|
|    12-1-2017        |         10       |
|---------------------|------------------|
|    12-2-2017        |         20       |
|---------------------|------------------|
|    12-1-2016        |         30       |
|---------------------|------------------|
|    12-2-2016        |         40       |
|---------------------|------------------|
|    12-3-2016        |         50       |
|---------------------|------------------|

Я хотел бы, чтобы в результате запроса были столбцы динамического года, как показано ниже:

|---------------------|------------------|------------------|
|        day          |   total_2017     |   total_2016     |
|---------------------|------------------|------------------|
|       12-1          |         10       |         30       |
|---------------------|------------------|------------------|
|       12-2          |         20       |         40       |
|---------------------|------------------|------------------|
|       12-3          |         0        |         50       |
|---------------------|------------------|------------------|

Может ли кто-нибудь помочь мне с наилучшим подходом?

  • 2
    Извлекай месяц и день. ГРУППА ПО. Регистр выражений для условной агрегации для каждого года.
  • 2
    Подумайте об обработке вопросов отображения данных в коде уровня представления / уровня приложения, если у вас это есть (например, простой цикл PHP, действующий на упорядоченный массив)
Теги:

1 ответ

1
Лучший ответ

Вот один из способов:

select month(date), day(date),
       sum(case when year(date) = 2017 then total else 0 end) as total_2017,
       sum(case when year(date) = 2016 then total else 0 end) as total_2016
from t
group by month(date), day(date);
  • 0
    Можем ли мы обновить его, чтобы динамически вытягивать поле года?
  • 0
    @SupreetTotagi. , , Да. Например, вы можете использовать year(now()) вместо 2018 года.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню