2

マークされた購入請求書が取り外されたら、売上請求書の正味額を返す関数を構築しています。これらのコストの一部は請負業者のコストであり、NIまたは請負業者のセット増加のいずれかを計算する必要があります。 「真の」価値を反映するために支払う。

したがって、1つの販売請求書に、それに対する購入請求書がある複数の請負業者がいる場合があります。NIで13.8%と計算されるものもあれば、標準の「上昇」が10%であるものもあれば、0%が追加されるものもあります。

私が理解しようとしているのは、購入請求書ごとに変数の数値が異なるため、関数全体をカーソルとして作成する必要があるかどうかです。

(SELECT SUM(th.hoursworked * (th.payrate * (1 + (@NIAMOUNT / 100))) ) 

ただし、@NIAMOUNTは購入請求書ごとに変更する必要があります。

カーソルを介してこれを行うための最良の方法ですか、それともこれを行うためのより良い方法がありますか?

これが少し冗長な場合は申し訳ありません!

4

2 に答える 2

2

ほぼ間違いなくカーソルは必要ありません

彼らが基づいている契約にあなたの労働時間を参加させて、契約からNIの価値を取りなさい。

于 2012-08-29T09:54:47.747 に答える
2

可能な限りカーソルを避ける必要があります。カーソルは「連続して」動作するため、SQLのパフォーマンスが制限されます。

計算が簡単な場合、これを行う1つの方法は、NIルックアップをインラインで実行することです。

(SELECT SUM(th.hoursworked * (th.payrate * (1 + 
                                           ((CASE somejoinedtable.UpliftType 
                                                  WHEN 1 THEN 10
                                                  WHEN 2 THEN 13.8
                                                  WHEN 3 THEN 0
                                             END
                                        / 100)))) 

これが面倒になってインラインで実行できない場合は、ユーザー定義関数を抽象化できます

CREATE FUNCTION dbo.fnGetNIAmount(int @someLookupParam)
...

そして、そうする

(SELECT SUM(th.hoursworked * (th.payrate * (1 + 
                                           ((dbo.fnGetNIAmount(somejoinedtable.UpliftType )
                                        / 100)))) 
于 2012-08-29T09:56:42.777 に答える