获取每月所有交易的总和,包括没有交易的月份

时间:2015-10-30 05:33:43

标签: sql sql-server-2008-r2

为了简化表格结构,我将使用一个简单的表格样本。假设我有这张表:

Quantity

我需要每月获得Select Month(date), Sum(Quantity) from tablename Group By Month(date) 的总和,包括没有交易的月份

我试过这个,但它只显示交易数月。

$(function() {
$("video").each(function() {
    this.pauseOthers = function(event) {
        $('video').addClass('stopvideo');
        $(this).removeClass('stopvideo');
        $('.stopvideo').each(function() {
            this.pause();
        });
    };
    this.addEventListener("play", this.pauseOthers.bind(this), false);
});
});

不介意这一年。让我们说该表仅包含当前年度数据

3 个答案:

答案 0 :(得分:2)

创建一个存储月份的虚拟表:

Select months.m, isnull(Sum(Quantity),0) as Q 
from tablename right join 
(VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) 
AS months(m)
on months.m=Month(tablename.date)
Group By months.m

Here is a fiddle

答案 1 :(得分:0)

这是一般的想法。关键是要创建一个列出所需月份的表,然后使用外部联接附加实际数据。

with months(mon) as (
    select  1 union all select  2 union all select  3 union all
    select  4 union all select  5 union all select  6 union all
    select  7 union all select  8 union all select  9 union all
    select 10 union all select 11 union all select 12
)
select m.mon, coalesce(sum(quantity), 0) as quantity
from months m left outer join <T> t on month(t.date) = m.mon
group by m.mon

如果从1月到12月需要超过一年的数据或者不喜欢这种方法,有很多方法可以创建月份列表。

答案 2 :(得分:0)

With Months as
(
  SELECT 1 AS MNTH
  UNION ALL
  SELECT MNTH+1 FROM Months WHERE MNTH<12
)

SELECT MONTH(MNTH),SUM(QUANTITY) 
FROM Months M LEFT JOIN TABLENAME T ON M.MNTH = MONTH(T.DATE)
GROUP BY MONTH(MNTH)