2015-01-14 3 views
0

У меня есть int field в моей базе данных, которые представляют год и месяц, например 201501, на 2015 год Январь, Мне нужно сгруппировать поле report_date и показать ежеквартальные данные. Таблица находится в следующий формат .Reporting_date этого поля INT, а не даты-времени и interest_payment является поплавкомgroup yearmonth поле за кварталом в sql-сервере

reporting_date interest_payment 
200401   5 
200402   10 
200403   25 
200404   15 
200406   5 
200407   20 
200408   25 
200410   10 

выхода запроса должен нравится этот

reporting_date interest_payment 
Q1 -2004   40 
Q2 -2004   20 
Q3 -2004   40 
Q4 -2004   10 

я попытался с помощью обычной группы по утверждению

select reporting_date , sum(interest_payment) as interest_payment from testTable 
group by reporting_date 

но получил другой результат output.Any помощь будет оценена

Благодаря

+1

Правильно ли это '2004010', или должно быть' 200410'? – Turophile

+0

Извините, просто обновлено, это должно 200410 – user3290807

ответ

0

до группировки вам нужно вычислить report_quarter, которая равна

(reporting_date%100-1)/3 

затем сделать выбор

select report_year, 'Q'+cast(report_quarter+1 as varchar(1)), SUM (interest_payment) 
from 
(
    select 
     *, 
     (reporting_date%100 - 1)/3 as report_quarter, 
     reporting_date/100 as report_year 
    from @x 
) T 
group by report_year, report_quarter 
order by report_year, report_quarter 
+0

спасибо, но этот запрос объединяет все годы под q1, q2, q3 qnd q4 buckets, а не создает 4 корзины за каждый год. – user3290807

+0

Я изменил свой запрос, но так как я показал вам путь в 1-м варианте, вы могли бы сделать это самостоятельно – ASh

+0

спасибо, что работает – user3290807

0

Я вижу две проблемы здесь:

  1. Вы должны преобразовать reporting_date в квартал.

  2. Вы должны указать SUM() значения в interest_payment за каждый квартал. У вас уже есть правильная идея для (2), поэтому я просто помогу с (1).

Если числа все 6 цифр (см. Мой комментарий выше), вы можете просто совершить несколько числовых манипуляций, чтобы превратить их в четверти. Сначала конвертируйте в месяцы, разделив их на 100 и сохранив остаток: MOD(reporting_date/100). Затем преобразуйте это в квартал: MOD(MOD(reporting_date/100)/4)+1 Добавьте Q и год, если хотите. Наконец, используйте , что значение в вашем GROUP BY.

Вы не указали, какую СУБД вы используете, поэтому вам, возможно, придется преобразовать функции самостоятельно.

+0

да цифры все 6 цифр, я пытался использовать MOD, но он говорит, что это не признанная функция , я использую сервер sql – user3290807

+0

Для SQL Server вы используете%, как в ответе @ ASh – Turophile

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