Месячная разумная сумма + PIVOT на сервере sql - PullRequest
0 голосов
/ 15 октября 2019

У меня есть 2 столбца количество и дата в таблице

Amount   |  Date (MM/DD/YYYY)

5         01/01/19
10        02/01/19
10        03/01/19
10        03/21/19
10        04/21/19

Ожидаемый результат:

01/01    02/01   03/01   04/01
  5        10      20      10

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Если вы знаете нужные столбцы, вы можете использовать условное агрегирование (или pivot):

select sum(case when month(date) = 1 then amount end) as [01/01],
       sum(case when month(date) = 2 then amount end) as [02/01],
       sum(case when month(date) = 3 then amount end) as [03/01],
       sum(case when month(date) = 4 then amount end) as [04/01]
from t
where date >= '2019-01-01' and date < '2020-01-01'

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

0 голосов
/ 15 октября 2019

Попробуйте ниже Query

  select DECODE(to_char(date), 'MM'), '04', sum(amount) ) AS 01/01,
     DECODE(to_char(date), 'MM'), '05', sum(amount) ) AS 02/01,
     DECODE(to_char(date), 'MM'), '06', sum(amount) ) AS 03/01,
     DECODE(to_char(date), 'MM'), '07', sum(amount) ) AS 04/01,
     DECODE(to_char(date), 'MM'), '08', sum(amount) ) AS 05/01,
     DECODE(to_char(date), 'MM'), '09', sum(amount) ) AS 06/01,
     DECODE(to_char(date), 'MM'), '10', sum(amount) ) AS 07/01,
     DECODE(to_char(date), 'MM'), '11', sum(amount) ) AS 08/01,
     DECODE(to_char(date), 'MM'), '12', sum(amount) ) AS 09/01,
     DECODE(to_char(date), 'MM'), '01', sum(amount) ) AS 10/01,
     DECODE(to_char(date), 'MM'), '02', sum(amount) ) AS 11/01,
     DECODE(to_char(date), 'MM'), '03', sum(amount) ) AS 12/01 from t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...