在 sql 服务器中按季度对年月字段进行分组

group yearmonth field by quarter in sql server

我的数据库中有一个代表年份和月份的 int 字段,例如 201501 代表 2015 年 1 月, 我需要按 reporting_date 字段分组并展示季度数据。table 采用以下格式。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

我尝试使用普通的 group by 语句

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

但得到不同的结果 output.Any 帮助将不胜感激

谢谢

分组前需要计算report_quarter,等于

 (reporting_date%100-1)/3

然后select

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. 您需要将 reporting_date 换算成四分之一。

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

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

中使用 that

您没有指定您使用的是哪个 DBMS,因此您可能需要自己转换函数。