Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 季度金额的计算_Sql_Sql Server_Sql Server 2008_Tsql_Sql Server 2005 - Fatal编程技术网

Sql 季度金额的计算

Sql 季度金额的计算,sql,sql-server,sql-server-2008,tsql,sql-server-2005,Sql,Sql Server,Sql Server 2008,Tsql,Sql Server 2005,我有一个问题,我想合并我的表数据通过日期,所有信息提供给表 如果聚合=四分之一 我的桌子 表-1 我想要这样的结果 Amount | Date | Aggregation 300 | 2013-03-01 | Quaterly 600 | 2013-06-01 | Quaterly 900 | 2013-09-01 | Quaterly 1200 | 2013-12-01 | Quaterly 检查这里这是一个财务季度+总和 如果您的季度只能

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

如果聚合=四分之一

我的桌子

表-1

我想要这样的结果

Amount |   Date      | Aggregation

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

检查这里这是一个财务季度+总和


如果您的季度只能通过日历而不是会计年度进行更改,您可以尝试以下方法:

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 

第一次计算子查询中的所有聚合或与另一个答案中的构造一起使用时。日期是用年份键计算的,如果您不需要年份的结果,可以删除“datepartyyyy,MyDate*10+”。之后,将季度数和特定年份合并。请不要将“MyDate/10*10000”部分替换为“MyDate*1000”,我们需要减少不必要的数字以生成正确的日期格式。

我没有季度概念,所以我可以找到任何解决方案@Nagarajs此解决方案帮助我,但我有一个问题,如果我需要季度最后日期而不是第一个日期,那么我该怎么办?假设季度日期为2013年1月1日,我希望2014年1月3日@Dholakiyaankit定制您的选择或将需求静态化,不要更改it@dholakiyaankit:怎么做?
;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
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