【问题标题】:calculation of amount for quarter计算季度金额
【发布时间】:2014-01-14 18:43:43
【问题描述】:

我有一个问题,我想通过日期合并我的表格数据,给定表格中提供的所有信息

如果聚合 = 季度

我的桌子

表 1

Amount |   Date      | Aggregation

100    |  2013-01-01 | Quaterly
100    |  2013-02-01 | Quaterly
100    |  2013-03-01 | Quaterly
200    |  2013-04-01 | Quaterly
200    |  2013-05-01 | Quaterly
200    |  2013-06-01 | Quaterly
300    |  2013-07-01 | Quaterly
300    |  2013-07-01 | Quaterly
300    |  2013-09-01 | Quaterly
400    |  2013-10-01 | Quaterly
400    |  2013-11-01 | Quaterly
400    |  2013-12-01 | Quaterly

我想要这样的结果

Amount |   Date      | Aggregation

300    |  2013-03-01 | Quaterly 
600    |  2013-06-01 | Quaterly 
900    |  2013-09-01 | Quaterly 
1200   |  2013-12-01 | Quaterly

【问题讨论】:

  • 我对 Quarter 没有概念,所以我能找到任何解决方案 @NagarajS

标签: sql sql-server sql-server-2008 tsql sql-server-2005


【解决方案1】:

在这里查看它的财务季度 + 总和

Checkout here

;With Totals as (

    SELECT  SUM(Amount) as Total,
            DATEADD(quarter,DATEDIFF(quarter,0,date),0) as RoundQuarter
    FROM    dbo.MyData AS om
    GROUP BY
            DATEADD(quarter,DATEDIFF(quarter,0,date),0)
)
select
    Total,
    DATEPART(year,RoundQuarter) -
       CASE WHEN DATEPART(quarter,RoundQuarter) = 1 THEN 1 ELSE 0 END as FinancialYear,
    CASE WHEN DATEPART(quarter,RoundQuarter) = 1 THEN 4
       ELSE DATEPART(quarter,RoundQuarter) - 1 END as FinancialQuarter
from
    Totals

【讨论】:

  • 这个解决方案对我有帮助,但我有一个问题,如果我需要季度最后日期而不是第一次约会,那我该怎么办?假设季度日期是 1-1-2013 我想要 1-3-2014 @dholakiyaankit
  • 自定义您的选择或将要求设为静态不要更改它
  • @dholakiyaankit:怎么样?
【解决方案2】:

如果您的季度只能通过日历年(而非财政年)更改,您可以试试这个:

SELECT amount, 
       Cast(Cast(mydate / 10 * 10000 + ( mydate%10 ) * 300 + 1 AS VARCHAR) AS 
            DATE) AS 
       MyDate, 
       aggregation 
FROM   (SELECT Sum(amount)                                        AS Amount, 
               Datepart(yyyy, mydate) * 10 + Datepart(qq, mydate) AS MyDate, 
               Max(aggregation)                                   AS Aggregation 
        FROM   table1 
        GROUP  BY Datepart(yyyy, mydate) * 10 + Datepart(qq, mydate)) a 
ORDER  BY 2 

第一次计算子查询中的所有聚合(或使用 WITH 构造),就像在另一个答案中一样。日期是用year-key计算的,如果不需要通过年份的结果,可以去掉'datepart(yyyy,MyDate)*10+'。之后,您将季度数字与特定年份合并。请不要将 'MyDate/10*10000' 部分替换为 'MyDate*1000',我们需要削减不必要的数字以生成正确的日期格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多