我正在尝试获取一份报告,该报告在四个季度内提供了数据。
例如来自:
1/1/2015-3/31/2015 as Q1
4/1/2015-6/30/2015 as Q2
7/1/2015-9/30/2015 as Q3
10/1/2015- 12/31/2015 as Q4
日期格式为:2015-01-01 00:00.000。
如何在SQL Server中获得4个季度的日期输出?
我试过了:
select count (cctransactions), avg(visits)
(CASE WHEN MONTH(1/1/2015) >= 1 AND MONTH(3/31/2015) <=3 THEN'Q1'
WHEN MONTH(4/1/2015) >= 4 AND MONTH(6/30/2015) <=6 THEN'Q2'
WHEN MONTH(7/1/2015) >= 7 AND MONTH(9/31/2015) <=9 THEN'Q3'
WHEN MONTH(10/1/2015) >= 10 AND MONTH(12/31/2015) <=12 THEN 'Q4' END) AS 'QUARTER'
FROM [Database].[dbo].[transactionMaster]
Group by cctransactions, ‘Quarter’
但这给了我一个错误,说GROUP BY表达式必须包含至少一个不是外引用的列。我不知道如何进行外部选择。
答案 0 :(得分:1)
计算出日期正在使用的季度
DATEPART(QUARTER, @theDate)
如果您希望将其格式化为Q1等,那么只需添加'Q':)
如果您想按季度汇总报告,可以GROUP BY
。
考虑使用预先计算的季度,月的第一天/最后一天,财务期等将Dates表添加到您的应用程序中。
答案 1 :(得分:0)
不确定这是否是您想要实现的目标。但我建议使用MONTH和CASE声明。这将正确标记它们属于哪个季度的数据。
SELECT
CASE
WHEN MONTH(FieldDate) >= 1 AND MONTH(FieldDate) <=3
THEN
'Q1'
WHEN MONTH(FieldDate) >= 4 AND MONTH(FieldDate) <=6
THEN
'Q2'
WHEN MONTH(FieldDate) >= 7 AND MONTH(FieldDate) <=9
THEN
'Q3'
WHEN MONTH(FieldDate) >= 10 AND MONTH(FieldDate) <=12
THEN
'Q4'
END 'QUARTER',
Field1,
Field2,
...
FieldX
FROM
[DataBase].[dbo].[SomeTable];
WHERE
YEAR(FieldDate) = @YEAR