在SQL Server中获取4个季度的日期

时间:2016-07-12 00:36:42

标签: sql sql-server

我正在尝试获取一份报告,该报告在四个季度内提供了数据。

例如来自:

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表达式必须包含至少一个不是外引用的列。我不知道如何进行外部选择。

2 个答案:

答案 0 :(得分:1)

计算出日期正在使用的季度

DATEPART(QUARTER, @theDate)

如果您希望将其格式化为Q1等,那么只需添加'Q':)

如果您想按季度汇总报告,可以GROUP BY

考虑使用预先计算的季度,月的第一天/最后一天,财务期等将Dates表添加到您的应用程序中。

https://msdn.microsoft.com/en-AU/library/ms174420.aspx

答案 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