1

誰かが次のストアドプロシージャクエリを作成しました(読みやすくするために、無関係なコードをすべて削除しました)

 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」テーブルの値を格納することを考えましたが、これにはデータを取得するために多くの内部結合を行う必要があり、パフォーマンスが低下します。
4

1 に答える 1

1

内部結合が正しくない可能性がありますが、必要なテーブルとフィールドのビューを作成し、それに結合を実装することができます。ほとんどの場合、ビジュアルツール(上記のリンクに表示)を使用してビューを作成する方が、コードを作成するよりも簡単で優れています。

ほとんどの結合の問題は、テーブルが正しく作成されていないことが原因です。真に明確に分散されたテーブルを作成すると、非常に役立ちます。

于 2012-09-18T07:42:01.513 に答える