在sql server中按季度分组groupmonth字段

时间:2015-01-14 06:25:48

标签: sql group-by

我的数据库中有一个int字段,表示年份和月份,如201501代表2015年1月, 我需要通过reporting_date字段进行分组并展示季度数据。该表格式如下.Reporting_date是一个int字段而不是datetime而且interest_payment是float

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

但得到了不同的结果输出。非常感谢

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我在这里看到两个问题:

  1. 您需要将reporting_date转换为四分之一。

  2. 每个季度您需要SUM() interest_payment中的值MOD(reporting_date/100)。 你似乎对(2)已经有了正确的想法,所以我只是帮助(1)。

  3. 如果这些数字都是6位数(请参阅上面的评论),您可以进行一些数字处理,将它们变成四分之一。 首先,通过除以100并保留余数来转换为月份:MOD(MOD(reporting_date/100)/4)+1。 然后,将其转换为四分之一:GROUP BY 如果需要,添加Q和年份。 最后,在{{1}}。

    中使用

    您没有指定您使用的是哪个DBMS,因此您可能需要自行转换这些功能。