在 Group By 子句中对值进行分组
Grouping values in Group By clause
请考虑这个简单的问题 table:
declare @tbl Table
(
Id int IDENTITY(1,1),
[Year] int,
[Month] tinyint,
[Value] int
);
insert into @tbl VALUES
(2010, 1, 2000),
(2010, 2, 500),
(2011, 4, 8000),
(2011, 1, 800),
(2010, 1, 5000),
(2011, 5, 1000),
(2010, 8, 7000),
(2011, 3, 7000),
(2010, 1, 4000),
(2011, 1, 900),
(2011, 1, 9000)
我想按 Year
和 Month
对这些记录进行分组,但在结果中我想要一个每年的数字表示每 3 个月的时间段:
1 First 3-Months period
2 Second 3-Months period
3 third 3-Months period
4 Fourth 3-Months period
我想要的结果是:
Year Period Sum Of Values
---------------------------------------------
2010 1 11500
2010 3 7000
2011 1 17700
2011 2 9000
我怎样才能得到这个结果?谢谢
您可以使用 (month+2)/3
:
计算 period/quarter
select year, (month+2) / 3 as quarter, sum(value)
from @tbl
group by year, (month+2) / 3
order by 1,2
我会用月份的 ceiling
除以 3.0 来计算周期。您需要使用 3.0 而不是 3,否则 SQL 服务器会将除法结果计算为整数(这将是取底的结果)。
select year, ceiling(month/3.0) , sum(value) from @tbl
group by year, ceiling(month/3.0)
order by 1,2
如果您需要更改期间,您只需更改您的部门的分母,例如 6 个月的期间将完成
select year, ceiling(month/6.0) , sum(value) from @tbl
group by year, ceiling(month/6.0)
order by 1,2
这里有一个 fiddle 演示了这一点,包括整数除法问题 https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=7c107c98928d262330513c2f33484366
请考虑这个简单的问题 table:
declare @tbl Table
(
Id int IDENTITY(1,1),
[Year] int,
[Month] tinyint,
[Value] int
);
insert into @tbl VALUES
(2010, 1, 2000),
(2010, 2, 500),
(2011, 4, 8000),
(2011, 1, 800),
(2010, 1, 5000),
(2011, 5, 1000),
(2010, 8, 7000),
(2011, 3, 7000),
(2010, 1, 4000),
(2011, 1, 900),
(2011, 1, 9000)
我想按 Year
和 Month
对这些记录进行分组,但在结果中我想要一个每年的数字表示每 3 个月的时间段:
1 First 3-Months period
2 Second 3-Months period
3 third 3-Months period
4 Fourth 3-Months period
我想要的结果是:
Year Period Sum Of Values
---------------------------------------------
2010 1 11500
2010 3 7000
2011 1 17700
2011 2 9000
我怎样才能得到这个结果?谢谢
您可以使用 (month+2)/3
:
select year, (month+2) / 3 as quarter, sum(value)
from @tbl
group by year, (month+2) / 3
order by 1,2
我会用月份的 ceiling
除以 3.0 来计算周期。您需要使用 3.0 而不是 3,否则 SQL 服务器会将除法结果计算为整数(这将是取底的结果)。
select year, ceiling(month/3.0) , sum(value) from @tbl
group by year, ceiling(month/3.0)
order by 1,2
如果您需要更改期间,您只需更改您的部门的分母,例如 6 个月的期间将完成
select year, ceiling(month/6.0) , sum(value) from @tbl
group by year, ceiling(month/6.0)
order by 1,2
这里有一个 fiddle 演示了这一点,包括整数除法问题 https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=7c107c98928d262330513c2f33484366