Я работаю над хранимой процедурой.У меня есть таблица с именем #CashFlow, которая содержит данные за промежуток времени.
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, в которой содержится список идентификаторов фондов, в которых я заинтересован.список фондов для меня) Например, давайте просто скажем, что в моей таблице #Funds есть только идентификаторы 1 и 2 (3 исключено).
У меня есть три периода времени (все заканчивающиеся '8/31 /2010 '), начиная с 01.01.2004, 01.01.2006 и 01.01.2010, и я хотел бы объединить сумму за три периода.
Я пробовал что-то подобное:
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'
Но он не делает то, что я хочу (на самом деле я не могу понять, что именно он делает).Если я выберу только один период, я действительно получу правильные значения для этого периода, но после того, как я добавлю одно из объединений, мои номера будут сбиты с ног.
Это что-то вроде исходного запроса,m пытается заменить:
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'
Обратите внимание, что мои даты на самом деле являются переменными (что не должно иметь значения для этого), и мой оригинальный запрос