我的数据库中有一个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
但得到了不同的结果输出。非常感谢
由于
答案 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)
我在这里看到两个问题:
您需要将reporting_date
转换为四分之一。
每个季度您需要SUM()
interest_payment
中的值MOD(reporting_date/100)
。
你似乎对(2)已经有了正确的想法,所以我只是帮助(1)。
如果这些数字都是6位数(请参阅上面的评论),您可以进行一些数字处理,将它们变成四分之一。
首先,通过除以100并保留余数来转换为月份:MOD(MOD(reporting_date/100)/4)+1
。
然后,将其转换为四分之一:GROUP BY
如果需要,添加Q和年份。
最后,在{{1}}。
您没有指定您使用的是哪个DBMS,因此您可能需要自行转换这些功能。