Как получить итоги за каждый месяц и с начала года (SQL-запрос)

Мне нужно взять, чтобы получить общее количество всех месяцев pmts каждый месяц для каждой компании, а затем получить полное «общее количество» за месяцы в годы до даты «YTD». Это таблица, которая у меня есть для записей. И кодек прямо под ним.

2014 Общий объем производства

    Jan-14  Feb-14  Mar-14  Apr-14  2014 YTD
Alpha corp  10  24  18  10  62
zeen corp   10  14  16  21  61
open corp   20  6   18  12  56
geez corp   15  5   14  8   42
mine corp   5   7   16  12  40
little corp 10  5   7   10  32
Vize corp   4   5   20  2   31
deng corp   5   9   8   9   31
nine corp   7   5   8   10  30
wash corp   5   8   7   10  30
hass corp   6   9   8   7   30
2014 YTD    77  97  144 222 445

а также

Declare @year int
Set @year = 2014

select 
   a.first_name, a.last_name,
   Count(case when Month(b.funded_date) = 1 Then 1 else Null End) Janurary, 
   Count(case when Month(b.funded_date) = 2 Then 1 else Null End) Feburary ,
   Count(case when Month(b.funded_date) = 3 Then 1 else Null End) March,
   Count(case when Month(b.funded_date) = 4 Then 1 else Null End) April
from 
   tContact a 
Inner join 
   tContract b On a.contact_id = b.contract_id
Group by 
   first_name, last_name

person user3723186    schedule 21.05.2014    source источник
comment
Это проблема отображения, например. что-то, что вам нужно сделать в коде на стороне клиента. Ваш запрос правильно возвращает данные за месяц. Это не работа SQL, чтобы дать вам итог после всего этого. Вы МОЖЕТЕ попробовать mysql с опцией свертки, но вам лучше просто суммировать в клиенте.   -  person Marc B    schedule 21.05.2014
comment
Какую базу данных вы используете?   -  person Gordon Linoff    schedule 21.05.2014
comment
Я использую MYSQL (сервер Sql 2008 r2)   -  person user3723186    schedule 21.05.2014
comment
MySQL не SQLServer   -  person Serpiton    schedule 21.05.2014


Ответы (1)


Предполагая SQL Server (на основе синтаксиса), вы можете делать то, что хотите, как:

select a.first_name + a.last_name,
       sum(case when Month(b.funded_date) = 1 Then 1 else 0 End) Janurary, 
       sum(case when Month(b.funded_date) = 2 Then 1 else 0 End) Feburary ,
       sum(case when Month(b.funded_date) = 3 Then 1 else 0 End) March,
       sum(case when Month(b.funded_date) = 4 Then 1 else 0 End) April,
       sum(case when Month(b.funded_date) <= 4 then 1 else 0 end) as YTD
from tContact a Inner join
     tContract b
     On a.contact_id = b.contract_id
Group by first_name + last_name with rollup;

Если у вас более одного столбца group by и вам нужна только одна сводка, загляните в GROUPING SETS.

person Gordon Linoff    schedule 21.05.2014