我正在处理存储过程。我有一个名为#CashFlow的表,其中包含一段时间的数据。不同时期的SQL sum()?
FundID TradeDate Amount
1 1/1/2004 123.00
1 6/30/2006 100.00
2 1/1/2004 100.00
2 3/15/2010 150.00
3 1/1/2010 100.00
我也有一个名为#Funds表,包含基金的ID,我很感兴趣的列表。(有一堆,我不会与你承担的处理产生的这个名单基金对我来说)例如,我们只是说我的#Funds表中只有ID的1和2(不包括3)。
我有三个时间段(所有结束'8/31/2010')开始于2004年1月1日,1/1/2006和2010年1月1日,我想汇总三个时期。
我已经试过这样的事情:
select sum(c1.amount), sum(c2.amount), sum(c3.amount)
from
#fundtable f
inner join
#cashflow c1 on f.fundid = c1.fundid and c1.tradedate between '1/1/2004' and '8/31/2010'
inner join
#cashflow c2 on f.fundid = c2.fundid and c2.tradedate between '1/1/2006' and '8/31/2010'
inner join
#cashflow c3 on f.fundid = c3.fundid and c3.tradedate between '1/1/2010' and '8/31/2010'
但它不这样做我想要的(其实我也弄不清到底是做)什么。如果我只选择一个期间,我会为期间获得正确的值,但是第二个我添加一个连接,我的数字将全部消失。
这是类似的东西我试图取代原有的查询:
select
(select sum(Amount) from #Cashflow c inner join #fundtable f on c.fundid = f.fundid where tradedate between '1/1/2004' and '8/31/2010') as 'Period1',
(select sum(Amount) from #Cashflow c inner join #fundtable f on c.fundid = f.fundid where tradedate between '1/1/2006' and '8/31/2010') as 'Period2',
(select sum(Amount) from #Cashflow c inner join #fundtable f on c.fundid = f.fundid where tradedate between '1/1/2010' and '8/31/2010') as 'Period3'
请注意,我的日期,实际上是变量(这不应该为这件事),我的原始查询
请问“......时候的情况下,其他的0结束”更准确吗? – Badiboy 2010-11-08 13:49:13
@Badiboy:'CASE'表达式将返回'NULL'作为日期之外的日期,SUM将忽略这个日期。 '0'没有区别。 – Quassnoi 2010-11-08 13:56:13
我不知道我怎么没有想到...很多爱 – pinkfloydx33 2010-11-08 14:02:43