Я добавил агрегированную пользователем информацию в свою базу данных для вычисления продукта группы.SQL CLR Агрегат неверно возвращает нуль
Код был выполнен главным образом от here.
Я использую функцию для расчета срока службы финансовых инструментов, для которых у меня есть ежемесячные данные о возврате. Таблица выглядит примерно так:
----------------------------------------------------------
| InstrumentId(int) | MonthEnd(datetime) | Return(float) |
----------------------------------------------------------
Мой запрос выглядит следующим образом:
SELECT R1.InstrumentId,
R1.MonthEnd,
R1.MonthlyReturn,
dbo.Product(1 + R2.MonthlyReturn) AS TotalReturn
FROM Returns R1
INNER JOIN Returns R2 ON R2.InstrumentId = R1.InstrumentId
AND R2.MonthEnd <= R1.MonthEnd
WHERE R1.InstrumentId BETWEEN 1 AND 50
GROUP BY R1.InstrumentId, R1.MonthEnd, R1.MonthlyReturn
ORDER BY R1.InstrumentId, R1.MonthEnd
запрос отлично работает, когда у меня есть только несколько инструментов, но с добавлением некоторых инструментов вызывает каждый результат будет NULL. Когда я выполняю запрос с помощью OPTION (MAXDOP 1), результаты будут точными.
Кто-нибудь знает, что вызывает проблему?
EDIT: Забыл упомянуть, что я бегу SQL Server 2012 и агрегатные цели .NET 4.5
«по существу дословно» может скрыть множество грехов - можете ли вы подробно остановиться на местах, где есть различия? –
@Damien_The_Unbeliever Я использовал EXP (SUM (LOG (...))) для вычисления продукта, и он игнорирует нули, поэтому я изменил продукт и проигнорировал нули. Я также пробовал код без каких-либо изменений, и он по-прежнему вызывает те же ошибки. –
Как вы изменили его, чтобы игнорировать нули? Вы только что изменили 'IsInvariantToNulls' или внесли изменения внутри' Accumulate'? –