这真的难倒我,但也许答案只是隐藏在显而易见的地方,我看不到讨厌的虫子。但话又说回来,我不是 DBA,我正在尝试学习如何编写更复杂的 SQL 来汇总数月的记录,而不是提取数千条记录。这样我就可以在后端聚合这些数据以减轻客户端的负载。
我想从数据库中选择数年的数据,并将每个月汇总到单独的表中自己的记录中。这意味着我一年中最多应该有 12 个月的 12 条记录 * 我选择的年数。
在我看来这似乎很简单,我选择一个日期范围并按使用 DATEPART(MM, ) 的月份来区分。然后我使用简单的 COUNT()、AVG() 和 ETC 函数将这些数据汇总到 case 语句之外的月份。
但是,这并不是那么好用。那么,如何选择一系列数据,按月将多列聚合到一条记录中,并在一个 select 语句中查看多年的数据?我可以用一个选择语句来简单地总结一个月,而不是一年中的每个月*我想要回溯的年数。
例子
这段代码做我想做的一切。只需要使它能够对一年中的每个月做同样的事情*我想申请的年数。
DECLARE @StartDate Date='2013-01-01'
DECLARE @EndDate Date='2013-02-01'
SELECT @Name,
@StartDate,
COUNT(a.[CODE]),
SUM(a.[TICKETS]),
AVG(a.[TICKETS]),
COUNT(CASE WHEN a.[FLAG1] = 'A' THEN 1 ELSE NULL END),
COUNT(CASE WHEN a.[FLAG1] = 'B' THEN 1 ELSE NULL END),
COUNT(CASE WHEN a.[FLAG1] IS NULL THEN 1 ELSE NULL END)
FROM [SOMETABLE] a
WHERE a.[CODE] = @Name
AND a.[DATE] >= @StartDate
AND a.[DATE] < @EndDate