【问题标题】:Calculate amount on the basis of semiannual以半年为单位计算金额
【发布时间】:2014-01-14 22:51:50
【问题描述】:

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

如果聚合 = 半年一次

我的桌子

表 1

Amount |   TheDate      | Aggregation
-------+----------------+-------------    
100    |  2013-01-01    | Quaterly
100    |  2013-02-01    | Quaterly
100    |  2013-03-01    | Quaterly
100    |  2013-04-01    | Quaterly
100    |  2013-05-01    | Quaterly
100    |  2013-06-01    | Quaterly
200    |  2013-07-01    | Quaterly
200    |  2013-07-01    | Quaterly
200    |  2013-09-01    | Quaterly
200    |  2013-10-01    | Quaterly
200    |  2013-11-01    | Quaterly
200    |  2013-12-01    | Quaterly

我想要这样的结果

Amount |   Date      | Aggregation
-------+-------------+-------------    
600    |  2013-06-01 | Quaterly 
1200   |  2013-12-01 | Quaterly 

查询:

SELECT  
    DATEADD(MONTH, 2, DATEADD(quarter, DATEDIFF(quarter, 0, TheDate), 0)) AS Amount,
    ROUND(CONVERT(FLOAT, SUM(Amount)) / 1000, 0) AS Total
FROM   
    myTble    
GROUP BY
    DATEADD(quarter, DATEDIFF(QQ, 0, TheDate), 0)

我正在尝试上面的查询,但它只适用于季度

【问题讨论】:

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


    【解决方案1】:

    你应该按年份和(MONTH-1)/6 = 0 for [1-6] or 1 for [7-12]分组

    SELECT SUM(Amount),
           MAX(TheDate)
    FROM T
    GROUP BY YEAR(TheDate),(MONTH(TheDate)-1)/6
    

    SQLFiddle demo

    【讨论】:

    • 我没有使用 SQL Server 的经验,但在 Microsoft Access 中,我必须将正斜杠 (/) 更改为反斜杠 (`) 以获得整数除法行为。最终,调整后的解决方案对我有用:MONTH(TheDate)-1)\6
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2012-11-12
    • 1970-01-01
    • 2014-01-14
    • 2015-05-21
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多