【发布时间】:2015-05-11 08:13:39
【问题描述】:
我有一张个人销售额表,我想将其汇总为两列,其中一列是每月总计,另一列是累计总和。
select Year, Month, 'Acquisition Income' = SUM(PAYMENTAMOUNT),
'Acquisition Cumulative' = (select SUM(PAYMENTAMOUNT)
from #CampaignPayments b
where (a.Year >= b.Year and a.Month >= b.Month)
or (a.Year > b.Year) )
into #CampaignTotals
from #CampaignPayments a
group by YEAR, MONTH
order by YEAR asc, MONTH asc
但是,我遇到了一些麻烦,有几个月没有付款,因此我那个月的“购置收入”是NULL。
Year Month Acquisition Income Acquisition Cumulative
2013 5 121782 121782
2013 6 25959.2 147741.2
2013 7 2875 150616.2
2013 8 1995 152611.2
2013 9 625 153236.2
2013 10 590 153826.2
2013 11 935 154761.2
2013 12 550 155311.2
2014 1 777 156088.2
2014 2 210 156298.2
2014 3 75 156373.2
2014 4 520 156893.2
2014 5 150 157043.2
2014 6 340 157383.2
2014 7 NULL NULL
2014 8 30 157413.2
我该怎么做
(a):在“购置收入”列中返回0 而不是NULL(我尝试过coalesce(SUM(paymentamount),0) 和isnull,但都不起作用。)
(b):继续计算“累积获取”列,即使当月没有付款? (即总和与上个月相同)
老实说,我并不完全理解累积金额的工作原理 - 在我看来,每行返回时,它应该汇总所有符合 where/or 子句标准的付款,所以我不确定为什么当月没有付款会影响前几个月的总和?
非常感谢。
【问题讨论】:
-
也许
SUM(ISNULL(PAYMENTAMOUNT, 0))能帮上忙? -
并不是说它会对您的问题产生任何影响,但我认为第一个条件最好表述为
a.Year = b.Year and a.Month >= b.Month。在任何情况下,合并总和都无济于事,因为任何空值都会导致您丢失整个月的信息。我认为您最好使用汇总合并值之类的方法:sum(coalesce(paymentamount,0))。 -
@paxdiablo - 没用。我没想到会。我认为那个月没有任何付款是有问题的。
-
@IvanSivak - 不幸的是也不起作用......
-
如果该月没有付款,那么
select肯定不会返回一行,而是返回一个空行?
标签: sql sql-server database tsql