グループの積を計算するために、ユーザー定義の集計をデータベースに追加しました。
コードは本質的に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) でクエリを実行すると、結果は問題ありません。
誰が問題の原因を知っていますか?
編集: SQL Server 2012 を実行していて、集約ターゲットが .NET 4.5 であることを忘れていました