繁体   English   中英

在SQL Server中按季度分组yearmonth字段

[英]group yearmonth field by quarter in sql server

我的数据库中有一个int字段,代表2015年1月的201501代表年和月,我需要按report_date字段分组并显示季度数据。该表采用以下格式。Reporting_date是一个int字段而不是datetime并且interest_payment是浮动的

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

但输出的结果有所不同。我们将不胜感激

谢谢

分组之前,您需要计算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. 您需要将reporting_date转换为四分之一。

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

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

您没有指定要使用的DBMS,因此您可能必须自己转换功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM