多个时间段的SQL查询组

时间:2014-09-24 15:02:13

标签: sql sql-server

我有下表:

SalesDate smalldatetime,
ProductId varchar(20),
QuantitySold tinyint,
Price smallmoney

我想获得每种产品的最后1m,3m,1y总量。我如何在一个查询中执行此操作?到目前为止,我的尝试是运行三个单独的查询,每个时间段一个,然后使用UNION组合它们。有没有更好的办法?我正在使用MS SQL 2008。

1 个答案:

答案 0 :(得分:4)

您可以使用多列更轻松地执行此操作:

select productId,
       sum(case when salesdate >= dateadd(month, -1, getdate()) then quantitysold else 0 end) as qs1m,
       sum(case when salesdate >= dateadd(month, -3, getdate()) then quantitysold else 0 end) as qs3m
       sum(case when salesdate >= dateadd(month, -12, getdate()) then quantitysold else 0 end) as qs12m
from table t
group by productId;

(注意:您可能希望至少删除getdate()的时间,但您可能采用完全不同的方式来获取" as-of" date。)

因为时间段重叠,所以使用列(和条件聚合)比使用每个时间段的单独行更容易。

相关问题