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