SQL查询:将日期,日期,日期等的列(不是日期列)相加

时间:2014-09-09 20:11:13

标签: sql case-when

我想知道在一个SQL语句中是否有一种方法,如果你可以按日期,每周到每个月,每个月到每天等分析总列数。

示例数据

DataDate       TimeInterval          TotalCalls
9/1/2014        12:00                  154
9/1/2014        15:15                   25 
9/2/2014        07:30                  125             
9/3/2014        11:45                    8
9/8/2014        10:15                   15  
9/9/2014        19:30                    6
9/9/2014        12:15                  100

在这种情况下,我希望select语句返回给定日期9/9/2014的以下数据和从Monday, 9/8/2014开始的一周

     Time Interval     SumofCalls
         Today            106
         WTD              121
         MTD              433   

我认为CASE WHEN会起作用,但我只能找到如何使用CASE WHEN来根据条件对要查询的日期列的数量求和的示例。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:0)

这是使用UNION并获取每个范围在SQL Server中执行此操作的方法。

<强> SQL Fiddle Demo

DECLARE @today DATE = CAST(GETDATE() AS DATE)

SELECT 'Today' AS 'TimeInterval', 
    SUM(TotalCalls) AS 'SumOfCalls'
FROM yourTable 
WHERE DataDate = @today
UNION ALL

SELECT 'WTD', 
    SUM(TotalCalls)
FROM yourTable
WHERE DataDate BETWEEN dateadd(week, datediff(week, 0, @today), 0) AND @today
UNION ALL

SELECT 'MTD', 
    SUM(TotalCalls)
FROM yourTable
WHERE DataDate BETWEEN DATEADD(dd,-(DAY(@today)-1),@today) AND @today

如果您可以将时间段作为列而不是行进行,则可以使用CASE