我想知道在一个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
来根据条件对要查询的日期列的数量求和的示例。有什么建议?谢谢!
答案 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
。