誰かが次のストアドプロシージャクエリを作成しました(読みやすくするために、無関係なコードをすべて削除しました)
SELECT
CRL.ClientNum ,
..."A lot of columns"...,
ISNULL((SELECT SUM(Amount) FROM db..History dh (nolock) WHERE dh.id = dd.Id AND ActivityId = 11), 0.00) AS [Some Amt],
..."A lot more columns"...
FROM db..[SomeLog] SL
..."A lot of inner joins and left joins"...
where clause
order by clause
これはすべて問題ありませんが、「db..History」テーブルから列を選択/比較するためにCaseステートメントを挿入する必要があります。問題は、このテーブルに既存の結合がないことです。
- 「db..History」テーブルに内部結合を入れようとしましたが、これにより、必要以上の行が返されます。おそらく、結合しているテーブルに複数の「履歴」があるためです。
- 最初に一時テーブルを使用して「db..History」テーブルの値を格納することを考えましたが、これにはデータを取得するために多くの内部結合を行う必要があり、パフォーマンスが低下します。