我有如下表:SQL查詢組
SalesDate smalldatetime,
ProductId varchar(20),
QuantitySold tinyint,
Price smallmoney
我想最後1M,3M,1Y每個產品銷售的總量。我如何在一個查詢中做到這一點?到目前爲止,我的嘗試是運行三個單獨的查詢,每個時間段一個,然後使用UNION組合它們。有沒有更好的辦法?我使用MS SQL 2008
我有如下表:SQL查詢組
SalesDate smalldatetime,
ProductId varchar(20),
QuantitySold tinyint,
Price smallmoney
我想最後1M,3M,1Y每個產品銷售的總量。我如何在一個查詢中做到這一點?到目前爲止,我的嘗試是運行三個單獨的查詢,每個時間段一個,然後使用UNION組合它們。有沒有更好的辦法?我使用MS SQL 2008
您可以更輕鬆地與多個列做到這一點:
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()
刪除次,但你可能有一個完全不同的獲取「原始」日期的方法。)
由於時間段重疊,因此與列(和條件聚合)相比,對於每個時間段而言,使用單獨的行更容易。
不,如果你想讓它們垂直疊放,那麼UNION是最好的選擇。 – 2014-09-24 15:05:38