-1

給与準備に必要な紙幣の枚数を計算する必要があります。最後の列、つまり USD1 に問題があります。

USD1 = 2 の値を取得します。

DECLARE @GrossPay Decimal(12,2)
SET @GrossPay = 132.78

SELECT
    @GrossPay,
    FLOOR(@GrossPay/100) AS USD100,
    FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50) AS USD50,
    FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20) AS USD20,
    FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20)/10) AS USD10,
FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20)/10))*10)/5) AS USD5,
FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20 -(FLOOR((@GrossPay -
FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20)/10))*10-(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay -
FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50 - (FLOOR((@GrossPay -
FLOOR(@GrossPay/100)*100 -(FLOOR((@GrossPay - FLOOR(@GrossPay/100)*100)/50))*50)/20))*20)/10))*10)/5))*5)/1) AS USD1

このような長いクエリで申し訳ありません。

上記の Sql クエリをコピーして貼り付けて実行すると、意味が理解できます。誰でもこれで私を助けてくれることを願っています。

前もって感謝します!

4

2 に答える 2

0

計算された以前の金額を減算する必要がないことに気付いた場合、多くの式を単純化できます (現時点で適切な式を得ることができないのは だけですUSD10)。たとえば、USD1列は常に、全額を 5 で割った余りに基づいて、0 から 4 の間の値になります。

これがモジュロ演算子の定義です。SQL では%であるため、次のように指定できます。

(CONVERT(int,@GrossPay)%5) as USD1

私が言うように、他のほとんどはモジュロを使用して計算することもできます (USD10 を除いて、まだその単純化を考えようとしています)。@GrossPayInt丸めを自動的に処理するため、 という別の変数も導入しました。

DECLARE @GrossPay Decimal(12,2) SET @GrossPay = 132.78
DECLARE @GrossPayInt int SET @GrossPayInt = @GrossPay

SELECT @GrossPay,
    @GrossPayInt/100 as USD100,
    (@GrossPayInt%100)/50 as USD50,
    (@GrossPayInt%50)/20 as USD20,
    CASE WHEN (@GrossPayInt%100)/10 IN (1,3,6,8) THEN 1 ELSE 0 END as USD10 as USD10,
    (@GrossPayInt%10)/5 as USD5,
    (@GrossPayInt%5) as USD1

他の誰かが USD10 の適切な短い表現を提案できれば、これで完了だと思います。

于 2011-09-06T06:34:27.530 に答える
0

ROUND の使用を検討してください:

SELECT ROUND(2.78,0)

または、追加0.5すると、下限ではfloorなく切り上げになります。

SELECT FLOOR(2.78+0.5)
于 2011-09-06T06:13:04.090 に答える